Похоже, что существует много вопросов с картинками, но я не нашел ни одного, связанного с изменением содержимого картинной коробки на растровое изображение, которое не было просто загружено из файла.
Мое приложение берет массив байтов и генерирует из них растровое изображение. Я действительно хочу избежать записи в файл в качестве промежуточного этапа обработки.
Поскольку это массив байтов, а не 2-байтовые слова, мне нужно было создать индексированное растровое изображение с палитрой в оттенках серого.
Затем я преобразовал индексированное растровое изображение в обычное (24-битное RGB).
Это код, который вызывает у меня ошибку:
pictureBox1.Image = (System.Drawing.Image)bmp2;
Когда я просматриваю форму (окно рисунка пытается нарисовать), поток просто останавливает выполнение с сообщением:
"неверный параметр в System.Drawing.Image.get_RawFormat ()"
Что я делаю не так? Как я могу создать безопасное растровое изображение для Picturebox?
Вот что создает "bmp2":
//creating the bitmap from the array
System.Drawing.Bitmap bmp1 = new System.Drawing.Bitmap(100, 100, 100, System.Drawing.Imaging.PixelFormat.Format8bppIndexed, MyIntPtr);
//creating a proper indexed palette
System.Drawing.Imaging.ColorPalette GrayPalette = bmp1.Palette;
for (int i = 0; i < GrayPalette.Entries.Length; i++)
{
GrayPalette.Entries[i] = Color.FromArgb(i, i, i);
}
bmp1.Palette = GrayPalette;
//creating a non-indexed, 24bppRGB bitmap for picturebox compatibility
System.Drawing.Bitmap bmp2 = new Bitmap(bmp1.Width, bmp1.Height, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
Graphics gr = Graphics.FromImage(bmp2);
gr.DrawImage(bmp1, 0, 0);
gr.Dispose();
Если я использую bmp1.Save (@ "testfile.bmp"), я получаю совершенно приемлемое растровое изображение, которое выглядит без аномалии.
Почему я не могу использовать свое растровое изображение в качестве картинки? Изображение?
Существуют ли дополнительные параметры окна изображения, которые мне нужно изменить перед загрузкой в него нового растрового изображения?