Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi PNG: Transparente Bereiche werden schwarz gezeichnet (https://www.delphipraxis.net/161395-png-transparente-bereiche-werden-schwarz-gezeichnet.html)

ralfiii 1. Jul 2011 16:06

PNG: Transparente Bereiche werden schwarz gezeichnet
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo!

Lade ich ein PNG mit transparententen Bereichen
(z.B.
http://www.jppss.k12.la.us/uploadedI...y%20Button.png )
dann werden die Bereiche die eigentlich transparent sein sollten einfach schwarz gezeichnet.
Ein BitBtn sollte in dem Fall ja wohl mit seinem "normalen" Background mischen.
Gibt's dafür einen fix?

Danke,
Ralf

haentschman 1. Jul 2011 16:23

AW: PNG: Transparente Bereiche werden schwarz gezeichnet
 
Hast du den normalen BitBtn aus Delphi benutzt ? Wenn ja, dann ist das so. :zwinker:
Lösung: benutze die PngComponents, die es bei Embarcadero für Versionen ab 2009 zum Download gibt.

lang hat die Suche gedauert... 8-) http://cc.embarcadero.com/item/26127

Uwe Raabe 1. Jul 2011 17:07

AW: PNG: Transparente Bereiche werden schwarz gezeichnet
 
Zitat:

Zitat von haentschman (Beitrag 1109491)
lang hat die Suche gedauert... 8-) http://cc.embarcadero.com/item/26127

Hast du eine Idee, wie ich das ändern könnte? Obwohl: Googlen nach Bei Google suchenPngComponents bringt es an erster Stelle...

haentschman 1. Jul 2011 17:14

AW: PNG: Transparente Bereiche werden schwarz gezeichnet
 
Ich war erst im EDN bei Downloads registrierte User. Dann hab ich die Blogs durchsuchen lassen. Auf Google bin ich nicht gekommen... warum auch. :stupid:

ralfiii 4. Jul 2011 10:46

AW: PNG: Transparente Bereiche werden schwarz gezeichnet
 
Zitat:

Zitat von haentschman (Beitrag 1109491)
Lösung: benutze die PngComponents, die es bei Embarcadero für Versionen ab 2009 zum Download gibt.

lang hat die Suche gedauert... 8-) http://cc.embarcadero.com/item/26127

Ich hab die PngComponents jetzt mal installiert und auf meiner Maschine funktionieren sie nicht. In einer frisch aufgesetzten VM wo in Delphi noch keine 3rd-Party Komponenten installiert sind funktionieren sie schon (sehen vielversprechend aus!).

Ich vermute der PNG-Handler der auf meiner Maschine schon registriert ist macht Troubles. Kann man irgendwie feststellen wo der Handler her ist? (also aus welcher Komponentensammlung).
Im Moment installiere ich auf der VM Stück für Stück die ganzen Komponentensammlungen aber das scheint mir nicht der schlaueste/effektivste Weg zu sein...

Danke!

EWeiss 4. Jul 2011 11:20

AW: PNG: Transparente Bereiche werden schwarz gezeichnet
 
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

ralfiii 4. Jul 2011 12:17

AW: PNG: Transparente Bereiche werden schwarz gezeichnet
 
Der Konflikt bestand mit den AlphaControls - und die unterstützen die Transparenz ganz prächtig.
Lösung also gefunden :)
TsButton macht alles super!
(und das passt auch ganz gut nachdem diese Anwendung irgendwann geskinnt werden soll)

Danke an alle!


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:23 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz