AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi PngDelphi - Transparent wird schwarz gedruckt.

PngDelphi - Transparent wird schwarz gedruckt.

Ein Thema von bernau · begonnen am 23. Jun 2014 · letzter Beitrag vom 25. Jun 2014
Antwort Antwort
Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.033 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#1

PngDelphi - Transparent wird schwarz gedruckt.

  Alt 23. Jun 2014, 14:21
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?
Gerd
Kölner Delphi Usergroup: http://wiki.delphitreff.de
  Mit Zitat antworten Zitat
matashen

Registriert seit: 29. Jan 2007
Ort: daheim
440 Beiträge
 
Delphi XE2 Enterprise
 
#2

AW: PngDelphi - Transparent wird schwarz gedruckt.

  Alt 23. Jun 2014, 14:38
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
Matthias
Das Leben ist eines der härtesten.
  Mit Zitat antworten Zitat
Pfaffe

Registriert seit: 29. Jan 2009
220 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: PngDelphi - Transparent wird schwarz gedruckt.

  Alt 23. Jun 2014, 14:55
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.
  Mit Zitat antworten Zitat
nuclearping

Registriert seit: 7. Jun 2008
708 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#4

AW: PngDelphi - Transparent wird schwarz gedruckt.

  Alt 23. Jun 2014, 15:11
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.
  Mit Zitat antworten Zitat
matashen

Registriert seit: 29. Jan 2007
Ort: daheim
440 Beiträge
 
Delphi XE2 Enterprise
 
#5

AW: PngDelphi - Transparent wird schwarz gedruckt.

  Alt 23. Jun 2014, 15:24
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};
Matthias
Das Leben ist eines der härtesten.

Geändert von matashen (23. Jun 2014 um 15:25 Uhr) Grund: formatierung
  Mit Zitat antworten Zitat
Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.033 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#6

AW: PngDelphi - Transparent wird schwarz gedruckt.

  Alt 24. Jun 2014, 08:14
vieleicht hilft das
Nicht ganz. PngObject ist ja kein Bitmap und kann deiner Funktion somit nicht übergeben werden.
Gerd
Kölner Delphi Usergroup: http://wiki.delphitreff.de
  Mit Zitat antworten Zitat
rwalper

Registriert seit: 6. Sep 2006
37 Beiträge
 
Delphi 10.3 Rio
 
#7

AW: PngDelphi - Transparent wird schwarz gedruckt.

  Alt 24. Jun 2014, 09:13
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
  Mit Zitat antworten Zitat
Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.033 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#8

AW: PngDelphi - Transparent wird schwarz gedruckt.

  Alt 24. Jun 2014, 23:24
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.
Gerd
Kölner Delphi Usergroup: http://wiki.delphitreff.de
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
1.228 Beiträge
 
Delphi 2007 Professional
 
#9

AW: PngDelphi - Transparent wird schwarz gedruckt.

  Alt 25. Jun 2014, 13:50
Wenn dein Drucker zu irgendeinem HP-Drucker kompatibel ist, installier den passenden HP-Treiber und probiers damit.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:20 Uhr.
Powered by vBulletin® Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2019 by Daniel R. Wolf