1

我正在尝试编写一个代码来提取位图文件中每个像素的像素颜色值。为此,我将 bmp 作为位图对象导入,并使用了 Bitmap.GetPixel(x,y) 方法,但它对我的应用程序来说不够快。我的一位同事给了我一个建议;我想我可以使用 fopen 打开文件本身,将字节数据解析为数组。你们有任何想法吗?使用 fopen 方法不是必须的,我可以使用任何东西。

提前致谢。

4

1 回答 1

2

您可以使用不安全的代码块,也可以使用Marshal 类。我会这样解决:

public static byte[] GetBytesWithMarshaling(Bitmap bitmap)
{
    int height = bitmap.Height;
    int width = bitmap.Width;

    //PixelFormat.Format24bppRgb => B|G|R => 3 x 1 byte
    //Lock the image
    BitmapData bmpData = bitmap.LockBits(new Rectangle(0, 0, width, height), ImageLockMode.ReadOnly, PixelFormat.Format24bppRgb);
    // 3 bytes per pixel
    int numberOfBytes = width * height * 3;
    byte[] imageBytes = new byte[numberOfBytes];

    //Get the pointer to the first scan line
    IntPtr sourcePtr = bmpData.Scan0;
    Marshal.Copy(sourcePtr, imageBytes, 0, numberOfBytes);

    //Unlock the image
    bitmap.UnlockBits(bmpData);

    return imageBytes;
}
于 2013-08-02T09:39:26.657 回答