Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi png transparent drucken (https://www.delphipraxis.net/172435-png-transparent-drucken.html)

Pfaffe 3. Jan 2013 16:01

png transparent drucken
 
Mit canvas.StretchDraw male ich ein transparentes png, jedoch wird der Hintergrund schwarz dargestellt.
Warum?
Habe bereits alles mögliche ausprobiert. Z.B. TPNGImage.Draw, auch verschiedene andere png's.

Popov 3. Jan 2013 16:20

AW: png transparent drucken
 
Kenne das Problem zwar nicht, aber keine Farbe ist erst einmal Schwarz, da Wert 0 für schwarz steht. Evtl. solltest transparent gegen weiß tauschen oder die Png auf ein weißes Feld legen.

Pfaffe 4. Jan 2013 09:33

AW: png transparent drucken
 
Wie kann ich zur Laufzeit in einem tranparenten png einen weißen Hintergrund einziehen?

schlagzu 4. Jan 2013 09:46

AW: png transparent drucken
 
Die Komponente kann mit transparenten PNGs umgehen: http://sourceforge.net/projects/graphics32/

Tonic1024 4. Jan 2013 09:47

AW: png transparent drucken
 
Ich würds mal so versuchen

Delphi-Quellcode:
  Canvas.Brush.Color:=clWhite;
  Canvas.Rectangle(0, 0, Width, Height);
Gruß,

Toni

Pfaffe 4. Jan 2013 15:37

AW: png transparent drucken
 
Hallo Toni, bei Deinem Vorschlag wird die angegebene Fläche weiß gemalt.
Hallo schlagzu, ich setze Delphi XE ein und das TPNGImage kann mit Alphakanälen umgehen. Da ich selbst bei anderen Projekten Graphic32 einsetze habe ich versucht die GR32 PNG library zu installieren, was mir aber kurzfristig noch nicht gelungen ist.
Wenn ich vor dem StretchDraw ein (ImageLogo1.Picture.Graphic as TPNGImage).RemoveTransparency; setze, dann ist der Hintergrund nicht mehr schwarz, jedoch ist der Vordergrund, also das Bild um welches mir geht, verschmiert.

Volker Z. 5. Jan 2013 00:17

AW: png transparent drucken
 
Hallo,

ich kann mit

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  Image1.Picture.LoadFromFile ('D:\Program Files (x86)\Embarcadero\RAD Studio\10.0\Images\GlyFX\glyFX\glyFX\Icons\Aero\PNG\256x256\arrow_left_256.png');
end;

procedure TForm1.FormDblClick(Sender: TObject);
begin
  Canvas.Draw (0, 0, Image1.Picture.Graphic)
  // oder auch mit StrechDraw
end;
prima ein transparentes PNG auf das Form-Canvas zeichnen. Wo willst Du eigentlich zeichnen?

Gruß

Pfaffe 5. Jan 2013 11:48

AW: png transparent drucken
 
Auf den Drucker (printer.Canvas) will ich das transparente png ausgeben. Die Ausgabe auf den Bildschirm ist kein Problem.

Volker Z. 5. Jan 2013 21:34

AW: png transparent drucken
 
Hallo,

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  b : TBitmap;
begin
  b := TBitmap.Create;
  try
    b.Assign (Image1.Picture.Graphic);

    Printer.BeginDoc;
    Printer.Canvas.Draw (0, 0, b);
    Printer.Canvas.StretchDraw (Rect (80, 0, 180, 100), b)

  finally
    Printer.EndDoc;
    FreeAndNil (b)
  end
end;

// Über den Objektinspektor noch die Eigenschaft Image1.Transparent := True setzen
Klappt bei mir.

Gruß

Pfaffe 5. Jan 2013 23:29

AW: png transparent drucken
 
Hallo Volker,
Deine Lösung funktioniert noch nicht ganz. Berücksichtigt man noch den Tipp von Toni, dann kommt folgende funktionierende Lösung raus:

Delphi-Quellcode:
var
  b: TBitmap;
begin
  Image1.Transparent:= true;
  Image1.Picture.LoadFromFile('TestBild.PNG');
  b:= TBitmap.Create;
  b.Transparent:= false;
  b.Canvas.Brush.Color:= clWhite;
  b.Canvas.Rectangle(0, 0, Image1.Picture.Graphic.Width, Image1.Picture.Graphic.Height);
  try
    b.Assign(Image1.Picture.Graphic);
    printer.BeginDoc;
    Printer.Canvas.Draw(20, 20, b);
    // Printer.Canvas.StretchDraw((Rect(20, 1000, Image1.Picture.Graphic.Width*2, Image1.Picture.Graphic.Height*2), b)
  finally
    FreeAndNil(b);
    printer.EndDoc;
  end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:46 Uhr.
Seite 1 von 2  1 2      

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