Я пытаюсь выбрать цвет данного пикселя изображения. Вот фрагмент кода
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
файлы.
попробуйте следующее
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;
}
Вы должны преобразовать изображение из индексированного в неиндексированное. Попробуйте этот код, чтобы преобразовать его:
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;
}