Всем доброго времени суток. Работаю с 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, пробовал написать то-же самое, но опять же из этого ничего не вышло. Палитра не применилась ко второму изображению.
Может у кого-то имеются идеи по данному вопросу, почему так происходит? Буду премного благодарен.
Найдено решение) использовать 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");
то всё применяется и работает. Всем спасибо за помощь)
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Я использовал в проекте EntityFramework Core с подходом database first и создал модель данных по документации
Есть exe программа, написанная на C#Она записывает значения в SQL Server
Расскажите пожалуйста, можно ли добиться возможности использования директив компилятора в xaml, wpfЕсли можно, то как?