![]() |
Bild drucken
Hallo!
Folgendes: In einer TImage-Komponente habe ich eine Bilddatei mit dem JP(E)G-Forat geladen. Nun will ich dieses Bild in FESTEN Maßen drucken lassen. Also die Druckgröße muss nicht der Größe des TImages entsprechen, sondern soll aus Integer-Konstanten gelesen werden. Ich habe zwar einiges im Forum gefunden, allerdings funktionirt es nicht so, wie ich es will: meist wird der Ausdruck zu klein, aber nie so, wie ich die Größe angebe... MCXSC |
Re: Bild drucken
Hi,
du koenntest es %ual ausdrucken! |
Re: Bild drucken
:wiejetzt: :wiejetzt: :wiejetzt: :wiejetzt: :wiejetzt: :wiejetzt: :wiejetzt:
Ich hab jetzt irgendwie nichts verstanden :drunken: :drunken: :drunken: |
Re: Bild drucken
wie hast du es denn bisher probiert. Du müsstest in etwa so vorgehen:
- Maßheinheit für Druckercanvas umstellen (auf 10tel Millimeter etc.) - Dein JPEG auf ein Bitmap bringen (zumindest brauchst du eine Canvas wo das Bild drauf ist) - Das Bild/Canvas per StretchBlt auf die Canvas des Druckers übertragen. |
Re: Bild drucken
Zitat:
Delphi-Quellcode:
Die Procedure Druckt Imagekomponenten von einem Form welches in 96 DPI definiert ist.
function TPrintForm.Screen2PrinterX(X:integer):integer;
begin result := (X * LogX) div 96; // 96 ist bei mir das Bezugssystem end; function TPrintForm.Screen2PrinterY(Y:Integer):integer; begin result := (Y * LogY) div 96; // 96 ist bei mir das Bezugssystem end; Procedure TPrintForm.DoImage(ChildControl:TControl;Top,Left:integer); var Info : PBitmapInfo; InfoSize : DWORD; Image : Pointer; ImageSize : DWORD; Bits : HBITMAP; DIBWidth, DIBHeight : Longint; begin LogX := GetDeviceCaps(Printer.Handle, LOGPIXELSX); LogY := GetDeviceCaps(Printer.Handle, LOGPIXELSY); {$IFDEF JPEG} if (ChildControl as TImage).Picture.Graphic is TJPEGImage then begin // Der einfache Weg. Um bessere Qualität zu erhalten, erst in BMP umwandeln und dann die andere Routine Printer.Canvas.StretchDraw(Rect(Screen2PrinterX(ChildControl.Left+Left)-Rand_Links, Screen2Printery(Top)-Rand_Oben, Screen2PrinterX(ChildControl.Left+Left)-Rand_Links+Screen2PrinterX(ChildControl.width), Screen2Printery(Top)-Rand_Oben+Screen2PrinterY(ChildControl.height)), (ChildControl as TImage).Picture.Graphic); end else begin {$ENDIF } Bits := (ChildControl as TImage).Picture.Bitmap.Handle; GetDIBSizes(Bits, InfoSize, ImageSize); Info := AllocMem(InfoSize); try Image := AllocMem(ImageSize); try GetDIB(Bits, 0, Info^, Image^); with Info^.bmiHeader do begin DIBWidth := biWidth; DIBHeight := biHeight; end; StretchDIBits(Printer.Canvas.Handle, Screen2PrinterX(ChildControl.Left+Left)-Rand_Links, Screen2Printery(Top)-Rand_Oben, Screen2PrinterX(ChildControl.width), Screen2PrinterY(ChildControl.height), 0, 0, DIBWidth, DIBHeight, Image, Info^, DIB_RGB_COLORS, SRCCOPY); finally FreeMem(Image, ImageSize); end; finally FreeMem(Info, InfoSize); end; {$IFDEF JPEG} end; {$ENDIF} end; die Koordinaten musst Du sicherlich auf Deine Wünsche anpassen... mfg Frank :coder: |
Re: Bild drucken
Setz den MapMopde auf MM_LOMETRIC, dann kannst du alle angaben in Millimetern machen.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:43 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