如何在C#中组合位图的RGBA

时间:2014-10-24 06:43:11

标签: c#

我遇到了Pixel的问题。

我想结合Bitmap的RGBA。我明白了。

但是,要避免一些问题。

首先,告诉你我的代码。

我的代码:

    private Bitmap getImg (IntPtr hWnd, int width, int height, int startX, int startY) {
        IntPtr hDC = Win32.GetDC(hWnd);
        IntPtr hMemDC = Win32.CreateCompatibleDC(hDC);
        IntPtr hBitmap = Win32.CreateCompatibleBitmap(hDC, width, height);

        if (hBitmap != IntPtr.Zero) {
            IntPtr hOld = (IntPtr) Win32.SelectObject(hMemDC, hBitmap);
            Win32.BitBlt(hMemDC, 0, 0, width, height, hDC, startX, startY, 13369376);
            Win32.SelectObject(hMemDC, hOld);
            Win32.DeleteDC(hMemDC);
            Win32.ReleaseDC(hWnd, hDC);
            Bitmap bmp = System.Drawing.Image.FromHbitmap(hBitmap);
            Win32.DeleteObject(hBitmap);
            GC.Collect();
            return bmp;
        }
        return null;
    }

    private void checkPixel (Bitmap img) {
        try {
            if (img != null) {
                long value = 0;
                for (int x = 0; x < img.Width; x++) {
                    for (int y = 0; y < img.Height; y++) {
                        Color pixel = img.GetPixel(x, y);
                        value += pixel.A + pixel.R + pixel.G + pixel.B;
                    }
                }

                Console.WriteLine("value : " + value);
            }
        } catch (Exception e) {
            Console.WriteLine(e);
        }
    }

    // And.. I used this way
    Bitmap img = getImg(hWnd, width, height, startX, startY);
    if (img != null) {
       checkPixel(img);
    }

所以......这段代码很酷我的电脑。

但是,在另一台计算机上工作,“价值”与我的“价值”不同。

BMP是一样的。 (游戏画面)

我不明白这个问题。

我该如何解决这个问题?

你有更好的主意吗?

0 个答案:

没有答案