using System.Drawing.Imaging;
Bitmap bitmap1bpp = new Bitmap("Monochrome.bmp");
Bitmap bitmap8bpp = new Bitmap("Palette.bmp");
Rectangle rect = new Rectangle(new Point(), bitmap8bpp.Size);
Bitmap buffer = new Bitmap(rect.Width, rect.Height);
using (Graphics g = Graphics.FromImage(buffer))
{
g.DrawImage(bitmap8bpp, rect);
bitmap1bpp.MakeTransparent(Color.White); // Не выводим единичные биты
g.DrawImage(bitmap1bpp, rect);
}
EncoderParameters parameters = new EncoderParameters(1);
parameters.Param[0] = new EncoderParameter(Encoder.ColorDepth, 8);
buffer.Save("out.bmp", ImageCodecInfo.GetImageEncoders()[0], parameters);
// Ну и все объекты типа Bitmap надо бы продиспозить
bitmap1bpp.Dispose();
bitmap8bpp.Dispose();
buffer.Dispose();
Преобразование формата файла
Помогите решить задачку.
Есть файл myfile.bmp с глубиной цвета 1 бит, необходимо скопировать его в файл myfile2.bmp, но уже с глубиной цвета 8 бит.
На одном из форумов мне посоветовали сделать что-то типа этого:
1. Создть массив байт.
2. Загрузить в Bitmap 1 bit - ный bmp
3. Скопировать через lockbits картинку в массив
4. Создать еще один массив байт, который вместит 8 битную картинку.
5. Циклом скопировать первый массив во второй, заполняя лишние байты, таким образом который тебе подойдет.
6. Создать новый Bitmap
7. В новый Bitmap через lockbits, скопировать второй массив.
Помогите реализовать это на C#. Который день мучаюсь, постоянно какието ошибки вылетают.
Неужели Graphics.DrawImage() с этим не справляется? С её помощью можно и цвета заменить, и смасштабировать... Не понимаю, зачем изобретать велосипед, когда уже давно как сверхзвуковые самолёты строят и в космос летают...
Цитата: Der Meister
Неужели Graphics.DrawImage() с этим не справляется? С её помощью можно и цвета заменить, и смасштабировать... Не понимаю, зачем изобретать велосипед, когда уже давно как сверхзвуковые самолёты строят и в космос летают...
Не позвольте изобрести велосипед заново, приведите пример кода ))
Этот код, например, приводит к ошибке.
Bitmap mySource = new Bitmap(MapPath("~/myfile.bmp"));
Graphics g = Graphics.FromImage(mySource);
Ошибка: Сведения об исключении: System.Exception: Невозможно создать объект графики из изображения, имеющего формат с индексированными пикселами.
Исходный файл то 1 битный.
Код:
Для замены цветов смотри версии Graphics.DrawImage(), принимающие в качестве параметра экземпляр объекта System.Drawing.Imaging.ImageAttributes: у него есть метод SetRemapTable().