Files
SuperVPN/output/Libraries/AForge.Imaging/AForge/Imaging/QuadrilateralFinder.cs
2025-10-09 09:57:24 +09:00

129 lines
3.4 KiB
C#

using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Imaging;
using AForge.Math.Geometry;
namespace AForge.Imaging;
public class QuadrilateralFinder
{
public List<IntPoint> ProcessImage(Bitmap image)
{
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
//IL_0022: Unknown result type (might be due to invalid IL or missing references)
CheckPixelFormat(((Image)image).PixelFormat);
BitmapData val = image.LockBits(new Rectangle(0, 0, ((Image)image).Width, ((Image)image).Height), (ImageLockMode)1, ((Image)image).PixelFormat);
List<IntPoint> list = null;
try
{
return ProcessImage(new UnmanagedImage(val));
}
finally
{
image.UnlockBits(val);
}
}
public List<IntPoint> ProcessImage(BitmapData imageData)
{
return ProcessImage(new UnmanagedImage(imageData));
}
public unsafe List<IntPoint> ProcessImage(UnmanagedImage image)
{
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
//IL_0039: Unknown result type (might be due to invalid IL or missing references)
//IL_0043: Invalid comparison between Unknown and I4
//IL_00bc: Unknown result type (might be due to invalid IL or missing references)
CheckPixelFormat(image.PixelFormat);
int width = image.Width;
int height = image.Height;
List<IntPoint> list = new List<IntPoint>();
byte* ptr = (byte*)image.ImageData.ToPointer();
int stride = image.Stride;
if ((int)image.PixelFormat == 198659)
{
for (int i = 0; i < height; i++)
{
bool flag = true;
for (int j = 0; j < width; j++)
{
if (ptr[j] != 0)
{
list.Add(new IntPoint(j, i));
flag = false;
break;
}
}
if (!flag)
{
for (int num = width - 1; num >= 0; num--)
{
if (ptr[num] != 0)
{
list.Add(new IntPoint(num, i));
break;
}
}
}
ptr += stride;
}
}
else
{
int num2 = Image.GetPixelFormatSize(image.PixelFormat) / 8;
byte* ptr2 = null;
for (int k = 0; k < height; k++)
{
bool flag = true;
ptr2 = ptr;
int num3 = 0;
while (num3 < width)
{
if (ptr2[2] != 0 || ptr2[1] != 0 || *ptr2 != 0)
{
list.Add(new IntPoint(num3, k));
flag = false;
break;
}
num3++;
ptr2 += num2;
}
if (!flag)
{
ptr2 = ptr + (nint)width * (nint)num2 - num2;
int num4 = width - 1;
while (num4 >= 0)
{
if (ptr2[2] != 0 || ptr2[1] != 0 || *ptr2 != 0)
{
list.Add(new IntPoint(num4, k));
break;
}
num4--;
ptr2 -= num2;
}
}
ptr += stride;
}
}
return PointsCloud.FindQuadrilateralCorners(list);
}
private void CheckPixelFormat(PixelFormat format)
{
//IL_0000: Unknown result type (might be due to invalid IL or missing references)
//IL_0006: Invalid comparison between Unknown and I4
//IL_0008: Unknown result type (might be due to invalid IL or missing references)
//IL_000e: Invalid comparison between Unknown and I4
//IL_0010: Unknown result type (might be due to invalid IL or missing references)
//IL_0016: Invalid comparison between Unknown and I4
//IL_0018: Unknown result type (might be due to invalid IL or missing references)
//IL_001e: Invalid comparison between Unknown and I4
if ((int)format != 198659 && (int)format != 137224 && (int)format != 2498570 && (int)format != 925707)
{
throw new UnsupportedImageFormatException("Unsupported pixel format of the source image.");
}
}
}