Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Bildskalierung beim Ausdruck stimmt nicht (https://www.delphipraxis.net/53792-bildskalierung-beim-ausdruck-stimmt-nicht.html)

easywk 22. Sep 2005 14:25


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:
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

xaromz 22. Sep 2005 14:35

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

easywk 22. Sep 2005 14:40

Re: Bildskalierung beim Ausdruck stimmt nicht
 
Im DestRec stehen:
Delphi-Quellcode:
  Rect.Top:=10;
  Rect.Bottom:=10+Img.Height;
  Rect.Left:=10;
  Rect.Right:=10+Img.Width;
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.

xaromz 22. Sep 2005 14:51

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

easywk 22. Sep 2005 15:07

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

xaromz 22. Sep 2005 15:14

Re: Bildskalierung beim Ausdruck stimmt nicht
 
Hallo,
Zitat:

Zitat von easywk
Dazu müsste ich ja im Vorfeld festlegen (lassen) wie groß das Bild sein soll.

Das wird sich nicht vermeiden lassen.
Zitat:

Zitat von easywk
...aber bei 100% gehen diese Programme einfach von einer bestimmten Größe aus. Irgendwoher muss die Info ja stammen ...

Bei vielen Bildformaten (PSD, JPEG, PNG, TIFF...) kann man eine Auflösung mit angeben. Ansonsten gehen diese Programme wahrscheinlich von der Bildschirmauflösung aus (unter Windows standardmäßig 96 DPI). Deshalb sind Bilder in Word auch erstmal so groß, wenn man sie einfügt.

Gruß
xaromz

easywk 22. Sep 2005 15:24

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 01:33 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz