Я использую этот код для сохранения растрового изображения в виде двоичных данных.
Bitmap bmp = new Bitmap(screenWidth, position);
Graphics g = Graphics.FromImage(bmp);
g.CopyFromScreen(screenLeft, screenTop, 0, 0, bmp.Size);
Rectangle rect = new Rectangle(0, 0, bmp.Width, bmp.Height);
System.Drawing.Imaging.BitmapData bmpData = bmp.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadOnly, bmp.PixelFormat);
IntPtr ptr = bmpData.Scan0;
int bytes = bmpData.Stride * bmp.Height;
byte[] rgbValues = new byte[bytes];
System.Runtime.InteropServices.Marshal.Copy(ptr, rgbValues, 0, bytes);
bmp.UnlockBits(bmpData);
File.WriteAllBytes(filename, bmp);
g.Dispose();
Поскольку мне нужны только значения первого канала, можно ли получить их из растрового изображения? Производительность имеет важное значение.
File.WriteAllBytes(filename, bmp);
вообще должен работать; bmp — это растровый объект, а не массив байтов. - person Nyerguds   schedule 25.07.2019BitmapData
техники со сверхмедленнымиSetPixel
. И по причинам, упомянутым в моем ответе здесь, он вылетит и сгорит на любом входе, кроме 32-битного ARGB. - person Nyerguds   schedule 25.07.2019