Registriert seit: 9. Jul 2003
Ort: Schwanewede
117 Beiträge
Delphi 7 Enterprise
|
Bildskalierung beim Ausdruck stimmt nicht
22. Sep 2005, 15:25
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:
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;
Und was passiert? Ich bekomme ein Minibild von ein paar Millimetern Breite. Kann mir das jemand erklären?
cu
easywk
Björn if all else fails - read the instructions
|
|
Zitat
|