1

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

图像为 24BppRgb 但创建位图后,位图格式为 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();
4

1 回答 1

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));
}

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

于 2013-04-09T17:17:55.330 回答