我需要从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();
答案 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));
}
...然后使用您的代码访问转换后图像的位。