![]() |
Probleme beim Drucken von Bildern
Moin, moin,
in meinen Programmen haben die Anwender die Möglichkeit, Bilder in die Druckausgabe einzubinden. Meistens wird das in den Fusszeilen der Seiten verwendet. Dabei benutze ich die folgenden Funktionen, wobei PrintIt() die Funktion ist, die ich aufrufe:
Delphi-Quellcode:
Nun zu meinem Problem:
procedure PrintBild(DestRect:TRect; Image:TImage);
var BitmapHeader:pBitmapInfo; BitmapImage:POINTER; Bitmap:TBitmap; HeaderSize,ImageSize:DWORD; begin Bitmap := TBitmap.Create; try Bitmap.Width:=Image.Picture.Width; Bitmap.Height:=Image.Picture.Height; Bitmap.PixelFormat:=pf24bit; // Convert GIF (JPEG, or whatever) to BMP Bitmap.Canvas.Draw(0,0, Image.Picture.Graphic); GetDIBSizes(Bitmap.Handle, HeaderSize, ImageSize); GetMem(BitmapHeader, HeaderSize); GetMem(BitmapImage, ImageSize); try GetDIB(Bitmap.Handle, Bitmap.Palette, BitmapHeader^, BitmapImage^); StretchDIBits(Printer.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 FreeMem(BitmapHeader); FreeMem(BitmapImage) end finally; Bitmap.Free; end; end; procedure PrintIt(Filename:String; BildHoeheMillimeter,BildBreiteMillimeter:Integer); var Img:TImage; Rect:TRect; cnt,bb,bh:INTEGER; begin Img:=TImage.Create(NIL); Img.Picture.LoadFromFile(Inhalt.Inhalt); bh:=Trunc(BildHoeheMillimeter*PixelsPerInch.X/25.4); bb:=Trunc(BildBreiteMillimeter*PixelsPerInch.X/25.4); if bb=0 then // ggfs. Seitenverhältnisse beibehalten bb:=Round(bh*(Img.Picture.Width/Img.Picture.Height)); if bh=0 then // ggfs. Seitenverhältnisse beibehalten bh:=Round(bb*(Img.Picture.Height/Img.Picture.Width)); // x,y = aktuelle Position auf dem Papier Rect.Top:=y; Rect.Bottom:=y+bh; Rect.Left:=x; Rect.Right:=x+bb; PrintBild(Rect,Img); Img.Free; end; die Anwender berichten mir, dass es immer wieder vorkommt, dass das Bild nicht gedruckt wird. Anstelle des Bildes wird ein schwarzer Kasten gedruckt, der genau der Bildgröße entspricht. Das Ganze ist nicht reproduzierbar. Sehr oft tritt es gar nicht auf, manchmal ab Seite 10, manchmal auch erst ab Seite 100. Wenn es auftritt, kann es nur "repariert" werden, in dem das Programm beendet wird. Ich selber habe das Problem noch nie gehabt, kann es also auch nicht debuggen. Der Fall wurde auch bei unterschiedlichen Druckern und sogar bei PDF-Erzeugern berichtet. Kann jemand anhand des Codes was "böses" sehen oder hat eine Idee, wo das Verhaltern herkommt? Bin für jede Idee dankbar cu easy |
Re: Probleme beim Drucken von Bildern
Mir fällt auf, dass du TImage verwendest obwohl hier eigentlich TPicture verwendet werden sollte:
Delphi-Quellcode:
Und später:
procedure PrintBild(DestRect:TRect; {Image:TImage}Picture:TPicture);
Delphi-Quellcode:
Das ist jetzt noch nicht die Lösung deines Problems, aber der Code ist so zumindest sauberer.
procedure PrintIt(Filename:String; BildHoeheMillimeter,BildBreiteMillimeter:Integer);
var Pict:TPicture; Rect:TRect; cnt,bb,bh:INTEGER; begin Pict:=TPicture.Create; try Pict.LoadFromFile(Inhalt.Inhalt); ... PrintBild(Rect,Pict); finally Pict.Free; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:06 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