Сохранить растровое изображение с прозрачностью в PNG в Delphi 2007 - PullRequest
3 голосов
/ 12 января 2011

У меня есть растровое изображение Delphi (32 бит), в котором есть информация о прозрачности.Мне нужно преобразовать и сохранить его в файл PNG с сохранением прозрачности.

В настоящее время у меня есть следующие инструменты: библиотека graphics32, GR32_PNG (от Christian Budde) и PNGImage (от Gustavo daud).

Каков наилучший способ сделать это?

РЕДАКТИРОВАТЬ 1. В моем растровом изображении не один прозрачный цвет, а пиксели с различными уровнями прозрачности, которые необходимо сохранить.

РЕДАКТИРОВАТЬ 2: Я получаю свое растровое изображение с альфа-информацией, устанавливая фон изображения в PNG, который у меня есть только с пустым альфа-слоем.Затем я пишу сглаженный текст на него.Затем я сохраняю растровое изображение.При открытии в gimp он показывает прозрачность, а при увеличении вы можете видеть эффект сглаживания.

Ответы [ 3 ]

4 голосов
/ 12 января 2011

Используйте PNGImage. В Delphi попробуйте это:

function ConvertToPNG(oBMPSrc: TBitmap; sFilename: String);
var
  oPNGDest: TPNGObject;
begin
  oPNGDest := TPNGObject.Create;
  try
    oPNGDest.Assign(oBMPSrc);
    oPNGDest.SaveToFile(sFilename); 
  finally
    oPNGDest.Free;
  end;
end;

Если это не сработает, вам, вероятно, придется копировать значения альфа и RGB по отдельности.

function ConvertToPNG(oBMPSrc: TBitmap; sFilename: String);
var
  oPNGDest: TPNGObject;
begin
  oPNGDest := TPNGObject.CreateBlank(COLOR_RGBALPHA, 8, oBMPSrc.Width, oBMPSrc.Height);
  try
    oPNGDest.CreateAlpha;
    // Copy over RGB
    ..
    // Copy over Alpha
    ..
    // Save to file
    oPNGDest.SaveToFile(sFilename); 
  finally
    oPNGDest.Free;
  end;
end;
3 голосов
/ 13 января 2011

Я не мог заставить ни один из двух других ответов работать. Они могут работать на других, но вот что я сделал.

  1. Я создал растровое изображение с прозрачностью.
  2. Назначил его TBitmap32 из библиотеки Graphics 32.
  3. Назначено для TPortableNetworkGraphics32 из GR32_PNG Кристиана Бадда для графики32
  4. Вызывается метод TPortableNetworkGraphics32.SaveToFile
1 голос
/ 12 января 2011

Проверьте эту ссылку

Есть функция:

function WriteBitmapToPngFile( Filename : string; Bitmap : TBitmap; TransparentColor:TColor):boolean;
...