![]() |
Bildskalierung beim Ausdruck stimmt nicht
Moin, moin,
irgendwie bin ich scheinbar zu bloede, eine Grafik vernuenftig auszudrucken. Mal kurz zur Problemstellung: ich habe eine Grafik in einer Datei (200x150 Pixel). Wenn ich die beispielsweise mit meinem Bildbearbeitungsprogramm bei 100% Skalierung ausdrucke, dann habe ich ein ansehnliches Bild von einigen Zentimetern. Nun versuche ich das Ganze mal selber auszudrucken, dazu hier die Codefragmente:
Delphi-Quellcode:
Und was passiert? Ich bekomme ein Minibild von ein paar Millimetern Breite. Kann mir das jemand erklären?
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 PrintImage(Filename:STRING); var Img:TImage; Rect:TRect; begin Img:=TImage.Create(NIL); Img.Picture.LoadFromFile(Filename); Rect.Top:=10; Rect.Bottom:=10+Img.Height; Rect.Left:=10; Rect.Right:=10+Img.Width; PrintBild(Rect,Img); Img.Free; end; cu easywk |
Re: Bildskalierung beim Ausdruck stimmt nicht
Hallo,
ich tippe mal darauf, dass das Bild nicht richtig skaliert wird. Ein Pixel auf dem Bildschirm ist ja zig mal größer als einer auf dem Drucker. Was für Werte stehen denn in Deinem DestRect? Gruß xaromz |
Re: Bildskalierung beim Ausdruck stimmt nicht
Im DestRec stehen:
Delphi-Quellcode:
Aber das Bild ist vorher ja gar nicht auf dem Bildschirm. Es wird direkt aus einer Datei geladen. Hatte auch schon überlegt, dass ich mit den PixelsPerInch umrechnen muss. Dazu müsste ich aber wissen, wie die PixelsPerInch vom den Originalbild sind (beim meinem Test behauptet mein Bildprogramm 72dpi, muss aber ja nicht immer so sein). Und ne Property, die mir die PixelsPersInch gibt habe ich bei TImage nicht gefunden.
Rect.Top:=10;
Rect.Bottom:=10+Img.Height; Rect.Left:=10; Rect.Right:=10+Img.Width; |
Re: Bildskalierung beim Ausdruck stimmt nicht
Hallo,
ein Bild mit einer Angabe in Pixel hat erst mal keine DPI-Auflösung. Du musst also erstmal ausrechnen, wie groß Dein Bild sein soll. Wenn Dein Ausdruck 4 cm sein soll (1,57 Inch), braucht Dein Bild bei einem 300 DPI-Drucker 472 Pixel (300 * 1,57). Du musst also Dein DestRect entsprechend der Druckerauflösung skalieren. Gruß xaromz |
Re: Bildskalierung beim Ausdruck stimmt nicht
Hallo,
hmm. Dazu müsste ich ja im Vorfeld festlegen (lassen) wie groß das Bild sein soll. Wenn ich das Bild jetzt aber einfach beispielsweise bei einer Textverarbeitung auf die Seite packe, dann fangen die ja auch mit einer Größe an, die auch zu dem passt, was man erwartet. Und da muss ich nicht vorher sagen, wieviele cm es denn sein sollen ... klar kann ich es hinterher skalieren, aber bei 100% gehen diese Programme einfach von einer bestimmten Größe aus. Irgendwoher muss die Info ja stammen ... cu easywk |
Re: Bildskalierung beim Ausdruck stimmt nicht
Hallo,
Zitat:
Zitat:
Gruß xaromz |
Re: Bildskalierung beim Ausdruck stimmt nicht
Hallo,
ok, dann versuche ich es erstmal mit den 96. Danke erstmal. cu easywk |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:30 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