Я пытаюсь получить все пиксели из заданного изображения, используя LockBits, и повторяю каждый пиксель через for
. Но я получаю неправильные пиксели. Я волнуюсь больше в секунду.
Код:
Bitmap bmp = new Bitmap(ImagePath);
pictureBox1.Image = bmp;
Rectangle bmpRec = new Rectangle(0, 0,
bmp.Width, bmp.Height); // Creates Rectangle for holding picture
BitmapData bmpData = bmp.LockBits(bmpRec,
ImageLockMode.ReadWrite,
PixelFormat.Format32bppArgb); // Gets the Bitmap data
IntPtr Pointer = bmpData.Scan0; // Set pointer
int DataBytes = Math.Abs(bmpData.Stride) * bmp.Height; // Gets array size
byte[] rgbValues = new byte[DataBytes]; // Creates array
Marshal.Copy(Pointer, rgbValues, 0, DataBytes); // Copies of out memory
StringBuilder Pix = new StringBuilder(" ");
// pictureBox1.Image = bmp;
StringBuilder EachPixel = new StringBuilder("");
for (int i = 0; i < bmpData.Width; i++)
{
for (int j = 0; j < bmpData.Height; j++)
{
var pixel = rgbValues[i + j * Math.Abs(bmpData.Stride)];
Pix.Append(" ");
Pix.Append(Color.FromArgb(pixel));
}
}
Теперь я создал изображение 2x2 пикселя чистого синего цвета. Мой вывод должен быть
255 0 0 255 255 0 0 255 255 0 0 255 255 0 0 255 (A R G B)
но я получаю что-то вроде
Цвет [A=0, R=0, G=0, B=255] Цвет [A=0, R=0, G=0, B=255] Цвет [A=0, R=0, G=0, B=0] Цвет [A=0, R=0, G=0, B=0]
Где я ошибаюсь? Извините, если я не могу точно объяснить, что не так. В основном вывод пикселей неверен и не совпадает с входным bmp.
var pixel
— это байт, а Color.FromArgb принимает int в качестве аргумента. - person jaket   schedule 08.05.2014