LockBits获取像素(X,Y)

时间:2018-10-15 17:48:30

标签: c# coordinates system.drawing lockbits

目前,我正在搜索RGB值(208、94、94),如果存在匹配项,它将告诉我的DX设备在屏幕上绘制并将其记录在控制台中。

好吧,我不确定如何获得像素的精确X,Y坐标。 Y很好,不是问题,但是X总是关闭并且是高值。我应该如何获得X,Y?有公式或我的代码错误吗?有没有一种方法可以在LockBits内快速使用GetPixel?

例如,它打印:

  

x:3772 y:187,而实际值为:944,187

     

x:3888 y:212,而实际值为:973,212

     

x:3788 y:224,而实际值为:948,224

unsafe
{
    using (System.Drawing.Bitmap bmp = new System.Drawing.Bitmap("FileName.png"))
    {

        BitmapData bitmapData = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height), ImageLockMode.ReadWrite, bmp.PixelFormat);
        int bytesPerPixel = System.Drawing.Bitmap.GetPixelFormatSize(bmp.PixelFormat) / 8;
        int heightInPixels = bitmapData.Height;
        int widthInBytes = bitmapData.Width * bytesPerPixel;
        byte* ptrFirstPixel = (byte*)bitmapData.Scan0;

        for (int y = 0; y < heightInPixels; y++)
        {
            byte* currentLine = ptrFirstPixel + (y * bitmapData.Stride);


            for (int x = 0; x < widthInBytes; x = x + bytesPerPixel)
            {
                int Blue = currentLine[x];
                int Green = currentLine[x + 1];
                int Red = currentLine[x + 2];

                if (Red == 208 & Green == 94 & Blue == 94)
                {
                   // Device.DrawText("Unit", TextFont, new RawRectangleF(x, y, float.MaxValue, float.MaxValue), UnitTextBrush);

                    Console.WriteLine($"x: {x} y: {y}");

                    break;
                }
            }
        }

        bmp.UnlockBits(bitmapData);
    }
}

0 个答案:

没有答案