从图像中读取原始字节数据

时间:2013-04-08 10:36:58

标签: c#

我需要从Image获取原始数据,而我正在使用Bitmap LockBits

图像为24BppRgb,但创建了Bitmap后,位图格式为32BppArgb

知道为什么会发生这种情况

    System.Drawing.Bitmap bmp = new Bitmap(image);
    Rectangle rect = new Rectangle(0, 0, bmp.Width, bmp.Height);
    System.Drawing.Imaging.BitmapData bmpData = bmp.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadOnly, image.PixelFormat);
    IntPtr ptr = bmpData.Scan0;
    int bytes = Math.Abs(bmpData.Stride) * bmp.Height;
    byte[] rgbValues = new byte[bytes];
    Marshal.Copy(ptr, rgbValues, 0, bytes);
    bmp.UnlockBits(bmpData);
    bmp.Dispose();

1 个答案:

答案 0 :(得分:0)

我怀疑你的原始图像实际上是32bppArgb。如果是这种情况,为什么不转换为RGB?

var bmp24bppRgb = new Bitmap(image.Width, image.Height, PixelFormat.Format24bppRgb);

using (var g = Graphics.FromImage(bmp24bppRgb))
{
  g.DrawImage(image, new Rectangle(0, 0, image.Width, image.Height));
}

...然后使用您的代码访问转换后图像的位。