Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Удаление белого фона и конвертация в PNG с прозрачным фоном в Delphi XE3

Delphi , Графика и Игры , Bitmap

Вопрос пользователя заключается в необходимости удаления белого фона из изображения в формате BMP, загруженного в TBitmap, и последующей конвертации в PNG с прозрачным фоном. Изображение состоит из белого фона и чёрных линий без антиалиасинга. Также рассматривается возможность замены цвета линий. Для работы используется среда разработки Delphi XE3, и предпочтительно избегать использования сторонних библиотек, за исключением FreeImage, если это необходимо.

Решение проблемы

Для решения поставленной задачи можно использовать следующий подход:

  1. Изменение формата пикселей изображения на pf1Bit. Это позволит обрабатывать изображение как бинарное, где каждый пиксель будет иметь только два состояния: фон или линия.
  2. Создание палитры с двумя цветами: один для фона, другой для линий. Значения цветов в палитре можно задать в соответствии с желаемыми.
  3. Создание объекта TPNGImage, присваивание ему обработанного TBitmap и установка прозрачности для PNG.

Пример кода на Object Pascal (Delphi), демонстрирующий вышеописанные шаги:

Type
  TMyPalette = Packed Record
    palVersion : Word;
    palNumEntries : Word;
    palPalEntry : Array [0..1] of TPaletteEntry;
  End;

Procedure ChangeBlackColor(bmp:TBitMap);
var
  pal:TMyPalette;
begin
  bmp.PixelFormat := pf1Bit;
  bmp.HandleType  := bmDIB;
  With pal Do
  Begin
    palVersion:=$0300;
    palNumEntries:=2;
    palPalEntry[0].peRed:= $FF;  // Белый цвет фона
    palPalEntry[0].peGreen:=$00;
    palPalEntry[0].peBlue:= $00;
    palPalEntry[0].peFlags:=PC_BLACK;  // Прозрачный цвет
    palPalEntry[1].peRed:= $00;  // Черный цвет линии
    palPalEntry[1].peGreen:=$00;
    palPalEntry[1].peBlue:= $FF;  // Можно изменить на другой цвет
    palPalEntry[1].peFlags:=PC_WHITE;  // Непрозрачный цвет
  End;
  bmp.Palette := CreatePalette(pLogPalette(@pal)^);
end;

procedure TForm3.Button1Click(Sender: TObject);
var
  png:TPngimage;
  bmp:TBitmap;
begin
  // Загрузка изображения в TBitmap
  bmp := LoadBitmapFromFile('path_to_your_map_image.bmp');
  // Изменение цвета линий
  ChangeBlackColor(bmp, clRed);  // Заменить на нужный цвет
  // Создание PNG с прозрачным фоном
  png:=TPngimage.Create;
  try
    png.Assign(bmp);
    png.TransparentColor := clWhite;  // Цвет фона, который будет прозрачным
    png.Transparent := true;
    // Сохранение результата в PictureBox или на диск
    Image2.Picture.Assign(png);
  finally
    png.Free;
  end;
end;

// Функция ChangeBlackColor может быть дополнена параметром для указания цвета линий
Procedure ChangeBlackColor(bmp:TBitMap; NewColor: TColor);
begin
  // ... (код из предыдущей процедуры)
  // Здесь может быть условие для изменения цвета линии в соответствии с NewColor
end;

Обратите внимание, что для работы с PNG изображениями необходимо включить в проект соответствующие модули из библиотеки PNGImage. Также важно правильно указать цвета в палитре, чтобы достичь желаемого результата.

Примечание

В примере кода использованы константы PC_BLACK и PC_WHITE, которые являются псевдонимами для указания прозрачного и непрозрачного цветов соответственно. В реальной программе их значения могут быть заданы как произвольные числа, не используемые в палитре для других цветов, чтобы обеспечить их идентификацию как "прозрачный" и "непрозрачный".

Используя данный подход, вы сможете удалить белый фон из изображения и конвертировать его в PNG с прозрачным фоном, а также заменить цвет линий на желаемый.

Создано по материалам из источника по ссылке.

Удалить белый фон из изображения BMP и сохранить его в формате PNG с прозрачным фоном, используя среду разработки Delphi XE3 без использования сторонних библиотек, за исключением возможного применения FreeImage.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Bitmap ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-02-05 12:52:41/0.0035488605499268/0