Einzelnen Beitrag anzeigen

EWeiss
(Gast)

n/a Beiträge
 
#6

AW: PNG: Transparente Bereiche werden schwarz gezeichnet

  Alt 4. Jul 2011, 12:20
Verstehe eure probleme nicht.
Es ist doch einfach ein PNG ins TBitmap format zu konvertieren ohne das die transparenten Eigenschaften verloren gehen.

Delphi-Quellcode:
function LoadSourceImage(ImgFile: WideString): HBITMAP;
var
   img: cardinal;
   hbmReturn: HBITMAP;
   format : integer;
begin
   Result := 0;

   if not GDIReady then
      exit;
   if not FileExists(ImgFile) then
      exit;

   GdipLoadImageFromFile(PWideChar(ImgFile), img);

   if img <> 0 then
   begin
     GdipGetImagePixelFormat(img, format);
     if format = PixelFormat32bppARGB then
     begin
       GdipCreateHBITMAPFromBitmap(pointer(img), hbmReturn, $000000);
       if hbmReturn <> 0 then
          Result := hbmReturn;
     end;

     GdipDisposeImage(img);
   end;
end;
Delphi-Quellcode:
function CreateImageFromFile(FileName: WideString): TBitmap;
var
  Img: TBitmap;
  hbmReturn: HBitmap;

begin

  Img := nil;

  hbmReturn := LoadSourceImage(FileName);
  if hbmReturn <> 0 then
  begin
    Img := TBitmap.Create; // >> hier ist das TBitmap ohne verlust der transparenz
    Img.Handle := hbmReturn;
  end;

  Result := Img;
end;
ABER!
Achtet darauf das euer Png.. im Format PixelFormat32bppARGB vorliegt
Und das TBitmap kann man nun ganz einfach für den BitBtn verwenden.

PS:
Stelle hier so viele projekte mit lösungen für PNG/TBitamp/konvertierungen zur verfügung.
In denen man stöbern kann .. wenn ihr davon nichts laden wollt seid ihr selbst schuld.

gruss

Geändert von EWeiss ( 4. Jul 2011 um 12:27 Uhr)
  Mit Zitat antworten Zitat