Einzelnen Beitrag anzeigen

easywk

Registriert seit: 9. Jul 2003
Ort: Schwanewede
117 Beiträge
 
Delphi 7 Enterprise
 
#1

Bildskalierung beim Ausdruck stimmt nicht

  Alt 22. Sep 2005, 14: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
  Mit Zitat antworten Zitat