Выбирание пиксельного цвета файла BMP/JPG

Я пытаюсь выбрать цвет данного пикселя изображения. Вот фрагмент кода

        Bitmap myBitmap = new Bitmap(@"c:\file.bmp");

        for (int Xcount = 0; Xcount < myBitmap.Width; Xcount++)
        {
            for (int Ycount = 0; Ycount < myBitmap.Height; Ycount++)
            {
                myBitmap.SetPixel(Xcount, Ycount, Color.Black);
            }
        }

Каждый раз я получаю следующее исключение:

Необработанное исключение: Система. InvalidOperationException: SetPixel не поддерживается для изображений с индексируемыми форматами пикселя.

Исключение выдается оба для bmp и jpg файлы.

9
задан Alexei Levenkov 5 February 2017 в 06:05
поделиться

2 ответа

попробуйте следующее

Bitmap myBitmap = new Bitmap(@"c:\file.bmp");
MessageBox.Show(myBitmap.PixelFormat.ToString());

Если вы получите «Format8bppIndexed», тогда цвет каждого пикселя Bitmap заменяется индексом в таблице из 256 цветов . и поэтому каждый пиксель представлен только одним байтом. вы можете получить массив цветов:

if (myBitmap.PixelFormat == PixelFormat.Format8bppIndexed) {
    Color[] colorpal = myBitmap.Palette.Entries;
}
6
ответ дан 4 December 2019 в 08:50
поделиться

Вы должны преобразовать изображение из индексированного в неиндексированное. Попробуйте этот код, чтобы преобразовать его:

    public Bitmap CreateNonIndexedImage(Image src)
    {
        Bitmap newBmp = new Bitmap(src.Width, src.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb);

        using (Graphics gfx = Graphics.FromImage(newBmp)) {
            gfx.DrawImage(src, 0, 0);
        }

        return newBmp;
    }
17
ответ дан 4 December 2019 в 08:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: