Как я могу отделить пиксели в изображении и поместить их в массив C #? - PullRequest
0 голосов
/ 18 февраля 2012

Я хочу импортировать фотографии и исследовать каждый пиксель, чтобы определить его значение RGB и затем поместите каждый пиксель (или его эквивалентное значение в RGB) в массив или аналогичную структуру данных, которая сохраняет пиксели в их первоначальном порядке.

Самое важное, что мне нужно знать, - это как разделить пиксели и определить значение каждого пикселя.

Ответы [ 2 ]

2 голосов
/ 18 февраля 2012
        Bitmap img = (Bitmap)Image.FromFile(@"C:\...");

        Color[,] pixels = new Color[img.Width, img.Height];

        for (int x = 0; x < img.Width; x++)
        {
            for (int y = 0; y < img.Height; y++)
            {
                pixels[x, y] = img.GetPixel(x, y);
            }
        }
0 голосов
/ 18 февраля 2012

Быстрая версия ответа с голосованием:

    public static int[][] ImageToArray(Bitmap bmp) {
        int height = bmp.Height;   // Slow properties, read them once
        int width = bmp.Width;
        var arr = new int[height][];
        var data = bmp.LockBits(new Rectangle(0, 0, width, height), 
                   System.Drawing.Imaging.ImageLockMode.ReadOnly, 
                   System.Drawing.Imaging.PixelFormat.Format32bppArgb);
        try {
            for (int y = 0; y < height; ++y) {
                arr[y] = new int[width];
                System.Runtime.InteropServices.Marshal.Copy(
                    (IntPtr)((long)data.Scan0 + (height-1-y) * data.Stride),
                    arr[y], 0, width);
            }
        }
        finally {
            bmp.UnlockBits(data);
        }
        return arr;
    }

Используйте Color.FromArgb () для сопоставления значения пикселя с цветом.

...