Как да деактивирате прозрачността за PNG

Как да деактивирам напълно прозрачността на даден PNGObject? Между другото, използвам единица PNGImage от версия 1.564.


person Little Helper    schedule 11.06.2012    source източник
comment
Какво означава да деактивирате прозрачността? Искате ли да зададете цветовия формат/битова дълбочина на Truecolor? Това е 24 бита на пиксел, без алфа.   -  person David Heffernan    schedule 11.06.2012
comment
@Roberts, защо искаш PNG без прозрачност? Предполагам, че ако искате, можете да присвоите обекта TPngImage на нов обект TBitmap и след това отново да присвоите обекта TBitmap обратно към обекта TPngImage. Не съм 100% сигурен, че това ще проработи, но мисля, че трябва.   -  person bjaastad_e    schedule 11.06.2012
comment
@Elling Вече го пробвах :D. Не се получи :D.   -  person Little Helper    schedule 11.06.2012
comment
@Робъртс Добре. В момента нямам Delphi под ръка, така че не мога да ви помогна да го проучите допълнително. Но виждам, че подобен въпрос е зададен по-рано в stackoverflow. Може би има малко помощ в отговорите на този въпрос: stackoverflow.com/questions/1141561   -  person bjaastad_e    schedule 11.06.2012
comment
@Elling TBitmap поддържа частична прозрачност   -  person David Heffernan    schedule 11.06.2012


Отговори (2)


Не мисля, че е възможно да деактивирате за постоянно TPNGObject прозрачността на изображението. Или поне не можах да намеря имот за това. И трябваше да се контролира от свойство, тъй като когато присвоите или заредите изображение, TPNGObject взема параметрите на изображението (включително прозрачност) от присвоения файл с изображение.

Така че като заобиколно решение бих предпочел да използвам процедурата RemoveTransparency след като заредите или присвоите изображението:

uses
  PNGImage;

procedure TForm1.Button1Click(Sender: TObject);
var
  PNGObject: TPNGObject;
begin
  PNGObject := TPNGObject.Create;
  try
    PNGObject.LoadFromFile('C:\Image.png');
    PNGObject.RemoveTransparency;
    PNGObject.Draw(Canvas, Rect(0, 0, PNGObject.Width, PNGObject.Height));
  finally
    PNGObject.Free;
  end;
end;
person TLama    schedule 11.06.2012

За просто начертаване на TPNGObject (библиотека Delphi PNGComponents) до някакъв фонов цвят (в пример: бял) с алфа смесване, опитайте това:

uses 
  PNGImage, PNGFunctions;

procedure TForm1.Button1Click(Sender: TObject);
var png: TPNGObject;
    bmp: TBitmap;
begin
  try
    // load PNG
    png := TPNGObject.Create;
    png.LoadFromFile('MyPNG.png');

    // create Bitmap
    bmp := TBitmap.Create;
    bmp.Width  := png.Width;
    bmp.Height := png.Height;

    // set background color to whatever you want
    bmp.Canvas.Brush.Color := clWhite;
    bmp.Canvas.FillRect(Rect(0, 0, png.Width, png.Height));

    // draw PNG on Bitmap with alpha blending
    DrawPNG(png, bmp.Canvas, Rect(0, 0, png.Width, png.Height), []);

    // save Bitmap
    bmp.SaveToFile('MyBMP.bmp');

  finally
    FreeAndNil(png);
    FreeAndNil(bmp);
  end;
end;

За да използвате процедурата DrawPNG, трябва да включите модула PNGFunctions.

person asd    schedule 10.10.2012