2011-01-12 7 views
3

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

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

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

EDIT 1: В моем растровом изображении нет только одного цвета, прозрачного, но с различными уровнями прозрачности, которые необходимо сохранить.

EDIT 2: Я получаю растровое изображение с альфа-информацией, устанавливая фон изображения в PNG, который у меня есть, только с пустым альфа-слоем. Затем я пишу на него сглаженный текст. Затем я сохраняю растровое изображение. Когда он открыт с помощью gimp, он показывает прозрачность и при масштабировании вы можете увидеть эффект сглаживания.

ответ

3

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

  1. Я создал растровое изображение с прозрачностью.
  2. Назначено его TBitmap32 из библиотеки Graphics 32.
  3. Назначенный его к TPortableNetworkGraphics32 от GR32_PNG Christian Budde для Graphics32
  4. Вызывается метод TPortableNetworkGraphics32.SaveToFile
1

Проверить это link

Существует функция:

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

Глядя на код в функции оказывается, что это только делает 1 цвет прозрачный вместо различных уровней, Мне нужно. (обновили вопрос, чтобы сделать это ясно). Однако я все еще пытался это сделать, создав PNGUnit и PNGLib из предоставленной ссылки. При вызове функции программа запускается, но закрывается до того, как она даже отображает основную форму, без какой-либо ошибки. Благодарим вас за помощь. – Tim

4

Использование 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; 
+0

Если я включу модуль PNGImage в свою программу, то сохраненное растровое изображение, которое я создал (проверьте EDIT 2 в главном вопросе) больше не отображает информацию о прозрачности. – Tim

Смежные вопросы