![]() |
bmp.assign(Image.picture) -->leeres bild????
Hallo,ich ahbe hier ein kleineres Problem, bei dem ich net weiterkomme!
und zwar zeichnen ich über canvas auf einem IMAGE ein Bild. Dieses will ich dann an den Drucker schicken um es zu drucken. Dazu muss ich vorher einen bestimmten code ausführen, allerdings ist das bild dann hinterher nicht vorhanden, bzw nur weiß! speichere ich es allerdings vorher auf der Festplatte und lade es dann wieder dann klappt das ganze! hat jemand ne ahnung wieso!`? hier der code den ich eigentlich ausführen möchte und der nicht klappt:
Delphi-Quellcode:
var pic : tjpegimage;
begin ... pic := tjpegimage.create; pic.assign(image1.picture.graphic); with printer do begin ... strechdraw(0,0,breite,hoehe,pic); ... end; ... end; wer hat ne idee wieso das net klappt! |
Re: bmp.assign(Image.picture) -->leeres bild????
Probier mal Folgendes:
Delphi-Quellcode:
Ich vermute, dass es an StretchDraw bzw. der geräteabhängigen internen Bitmap von TJpegImage liegt.
var pic : tjpegimage;
begin ... pic := tjpegimage.create; pic.assign(image1.picture.graphic); //Neues TImage auf Form klatschen Image2.Picture.Assign(Pic); //Wenn in Image2 jetzt das Bild angezeigt wird, liegts an StretchDraw. ... end; |
Re: bmp.assign(Image.picture) -->leeres bild????
gut wird auf image 2 angezeigt! und waskann ich da jetzt machen?
|
Re: bmp.assign(Image.picture) -->leeres bild????
Wahrscheinlich reicht es schon, die JPEG-Grafik aus dem TImage in eine TBitmap zu kopieren. Dann:
Delphi-Quellcode:
Ansonsten habe ich hier noch eine uralte Prozedur rumliegen, die (glaube ich) auch mal funktioniet hat.
...
TempBMP.Assign(Pic); TempBMP.HandleType := bmDIB; with Printer do begin ... Canvas.StretchDraw(R, TempBMP); end;
Delphi-Quellcode:
procedure StretchBitmapToPrinter(TargetCanvas: TCanvas; DestRect: TRect; Bitmap: TBitmap);
var BitmapHeader: pBitmapInfo; BitmapImage: Pointer; HeaderSize: DWORD; ImageSize: DWORD; begin GetDIBSizes(Bitmap.Handle, HeaderSize, ImageSize); GetMem(BitmapHeader, HeaderSize); GetMem(BitmapImage, ImageSize); try GetDIB(Bitmap.Handle, Bitmap.Palette, BitmapHeader^, BitmapImage^); StretchDIBits(TargetCanvas.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; end; |
Re: bmp.assign(Image.picture) -->leeres bild????
StretchDraw() wird von den meisten Druckertreibern nicht unterstützt und von daher ist StretchDIBits die einzige Möglichkeit auf eine hohe Unterstützung zurück greifen zu können. Die grösste Anzahl der Druckertreiber unterstützen StretchDIBits().
|
Re: bmp.assign(Image.picture) -->leeres bild????
vielen dank für die Hilfe!
Delphi-Quellcode:
...
...
TempBMP.Assign(Pic); TempBMP.HandleType := bmDIB; with Printer do begin ... Canvas.StretchDraw(R, TempBMP); end; bei diesem code hängt sich mein rechner immer auf! :wall: achso, was ich vergessen hatte zu erwähnen, wenn ich das bild auf festplatte speichere ist es150mb groß! und was muss ich bei dem zweite code beispiel als variablen übergeben? :wiejetzt: kenn diese net! dankö! |
Re: bmp.assign(Image.picture) -->leeres bild????
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Was du natürlich immer machen kannst, ist, das Bild "gekachelt" auf den Drucker auszugeben. Also immer nur ein Rechteck mit beschränkter Größe (siehe Bild). Das erfordert zwar ein bischen mehr Code, aber dir geht dann nicht mehr so schnell der Speicher aus. AFAIK müsstest du dir dafür aber noch eine andere JPEG-Komponente suchen, weiß nicht ob TJpegImage für sowas flexibel genug ist. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:45 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 by Thomas Breitkreuz