Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi PngDelphi - Transparent wird schwarz gedruckt. (https://www.delphipraxis.net/180845-pngdelphi-transparent-wird-schwarz-gedruckt.html)

bernau 23. Jun 2014 14:21

PngDelphi - Transparent wird schwarz gedruckt.
 
Hi,

wer von euch nutzt die Komponente PngDelphi.

Ich stoße damit grade auf einen eigenartigen Fehler. Wenn ich eine PNG-Grafik mit transparenten Bereichen lade, wird diese korrekt auf dem Bildschirm-Canvas gezeichnet. Aber wenn ich den Printer-Canvas benutze, dann werden die transparenten Stellen schwarz gezeichnet.

Hatt jemand eine Idee, woran das liegen könnte?

matashen 23. Jun 2014 14:38

AW: PngDelphi - Transparent wird schwarz gedruckt.
 
Hallo,

printer.canvas ist so eine Sache. Das Teil zickt und ist auch nicht gedacht so angesteuert zu werden wie ein Bildschirm.

Hast du einen Brocken Code für mich?

Gruß
Matthias

Pfaffe 23. Jun 2014 14:55

AW: PngDelphi - Transparent wird schwarz gedruckt.
 
Ich kenne das Problem und gehe davon aus, dass es sich um Druckertreiberbugs handelt. Es hat nichts mit pngDelphi zu tun. Meine prakmatische Lösung: Für den Ausdruck ein Bild mit weißem Hintergrund verwenden.

nuclearping 23. Jun 2014 15:11

AW: PngDelphi - Transparent wird schwarz gedruckt.
 
Zitat:

Zitat von Pfaffe (Beitrag 1263265)
Für den Ausdruck ein Bild mit weißem Hintergrund verwenden.

Das klappt nur solange, wie die Bilder nicht irgendwo drüberliegen.

@bernau:
Eine andere Möglichkeit wäre, statt die Ausgabe auf den Printer.Canvas zu zeichnen, alles in eine Puffer-Bmp zu zeichnen und diese dann an den Drucker zu schicken.

matashen 23. Jun 2014 15:24

AW: PngDelphi - Transparent wird schwarz gedruckt.
 
vieleicht hilft das

Code:
PROCEDURE PrintBitmap(Canvas: TCanvas; DestRect: TRect; Bitmap: TBitmap);
  VAR
    BitmapHeader: pBitmapInfo;
    BitmapImage: POINTER;
    HeaderSize: Cardinal;
    ImageSize  : DWORD;
BEGIN
  GetDIBSizes(Bitmap.Handle, HeaderSize, ImageSize);
  Bitmapheader := VirtualAlloc(nil, HeaderSize, MEM_COMMIT, PAGE_READWRITE);
  BitmapImage := VirtualAlloc(nil, ImageSize, MEM_COMMIT, PAGE_READWRITE);

  TRY
    GetDIB(Bitmap.Handle, Bitmap.Palette, BitmapHeader^, BitmapImage^);

    StretchDIBits(Canvas.Handle,
                  DestRect.Left, DestRect.Top,    // Destination Origin
                  DestRect.Right - DestRect.Left, // Destination Width
                  DestRect.Bottom - DestRect.Top, // Destination Height
                  0, 0,                           // Source Origin
                  Bitmap.Width, Bitmap.Height,    // Source Width & Height
                  BitmapImage,
                  TBitmapInfo(BitmapHeader^),
                  DIB_RGB_COLORS,
                  SRCCOPY)
  FINALLY
    VirtualFree(Bitmapheader, 0, MEM_FREE);
    VirtualFree(bitmapimage, 0, MEM_FREE);
  END
END {PrintBitmap};

bernau 24. Jun 2014 08:14

AW: PngDelphi - Transparent wird schwarz gedruckt.
 
Zitat:

Zitat von matashen (Beitrag 1263271)
vieleicht hilft das

Nicht ganz. PngObject ist ja kein Bitmap und kann deiner Funktion somit nicht übergeben werden.

rwalper 24. Jun 2014 09:13

AW: PngDelphi - Transparent wird schwarz gedruckt.
 
Ich habe das hinbekommen, in dem ich den Umweg über ein Windows-Metafile gehe. Allerdings verwende ich TdxPNGImage der Developer Express-Komponenten:

Delphi-Quellcode:
var
  WMF: TMetafile;
  MC: TMetafileCanvas;
  PNGImage: TdxPNGImage;
begin
  PNGImage := TdxPNGImage.Create;
  try
    PNGImage,LoadFromFile('C:\Temp\Test.png');
    WMF := TMetafile.Create;
    try
      WMF.Width := 1000;
      WMF.Height := 1000;
      MC := TMetafileCanvas.Create(WMF, 0);
      try
        // Zeichen der PNG-Grafik
        MC.Draw(0,0,PNGImage);
      finally
        MC.Free;
      end;
      // Ausgabe auf Drucker
      Printer.Canvas.Draw(0,0,WMF);
    finally
      WMF.Free;
    end;
  finally
    PNGImage.Free;
  end;
end;
Vielleicht nützt Dir diese Anregung.

Noch was wichtiges: Oft hängt es vom Druckertreiber ab, ob Transparenzen überhaupt gerendert werden. Der Standard-Windows-Druckertreiber kann es oft nicht. Wir verwenden in solchen Fällen die PostScript-Treiber, sofern welche verfügbar sind.

Gruß
Remo

bernau 24. Jun 2014 23:24

AW: PngDelphi - Transparent wird schwarz gedruckt.
 
Zitat:

Zitat von rwalper (Beitrag 1263318)
Ich habe das hinbekommen, in dem ich den Umweg über ein Windows-Metafile gehe. Allerdings verwende ich TdxPNGImage der Developer Express-Komponenten:

Habe es versucht. Allerdings werden dann die transparenten Bereiche auch auf dem Bildschirm schwarz gezeichnet. :-(

Blup 25. Jun 2014 13:50

AW: PngDelphi - Transparent wird schwarz gedruckt.
 
Wenn dein Drucker zu irgendeinem HP-Drucker kompatibel ist, installier den passenden HP-Treiber und probiers damit.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:45 Uhr.

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