Проблема с Bitmap Palette 8bpp indexed (Window xp)

104
28 мая 2021, 00:10

Всем доброго времени суток. Работаю с 8-битными индексированными изображениями в формате png. Стояла задача скопировать палитру из одного изображения и применить к другому.

 Bitmap first = new Bitmap("source/img1.png");
 Bitmap second = new Bitmap("source/img2.png");
 ColorPalette fp = first.Palette;
 second.Palette = fp;
 second.Save("source/img2.2.png");

И вот проблема. Этот код был написан из под windows 10 в Visual Studio 2019. Проект собран с .Net Framework 4.0 x86 (Чтобы работал на Windows xp) На Windows 10 всё отрабатывает правильно, но попробовав запустить собранный проект на Windows xp выясняется что вышеприведенный участок кода не работает. (Т.е. палитра не применяется ко второму изображению). Скачивал даже Visual Studio 2010 устанавливал на виртуальную машину Win Xp, пробовал написать то-же самое, но опять же из этого ничего не вышло. Палитра не применилась ко второму изображению.

Может у кого-то имеются идеи по данному вопросу, почему так происходит? Буду премного благодарен.

Answer 1

Найдено решение) использовать LockBits. Если сделать так:

Bitmap first = new Bitmap("source/img1.png");
Bitmap second = new Bitmap("source/img2.png");
ColorPalette fp = first.Palette;
second.Palette = fp;
GraphicsUnit gu = new GraphicsUnit();
int width = Convert.ToInt32(second.GetBounds(ref gu).Width);
int height = Convert.ToInt32(second.GetBounds(ref gu).Height);
BitmapData data = second.LockBits(new Rectangle(Point.Empty, second.Size), System.Drawing.Imaging.ImageLockMode.ReadWrite, System.Drawing.Imaging.PixelFormat.Format8bppIndexed);
second.UnlockBits(data);
second.Save("test.png");

то всё применяется и работает. Всем спасибо за помощь)

READ ALSO
Обновление модели в EF Core при подходе Db-First

Обновление модели в EF Core при подходе Db-First

Я использовал в проекте EntityFramework Core с подходом database first и создал модель данных по документации

103
Запись разных значений в Sql server

Запись разных значений в Sql server

Есть exe программа, написанная на C#Она записывает значения в SQL Server

89
Спецификация AVI файлов

Спецификация AVI файлов

Есть ли нормальная спецификация формата файлов AVI?

110
Директивы компилятора для xaml, wpf

Директивы компилятора для xaml, wpf

Расскажите пожалуйста, можно ли добиться возможности использования директив компилятора в xaml, wpfЕсли можно, то как?

194