AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Bildskalierung beim Ausdruck stimmt nicht
Thema durchsuchen
Ansicht
Themen-Optionen

Bildskalierung beim Ausdruck stimmt nicht

Ein Thema von easywk · begonnen am 22. Sep 2005 · letzter Beitrag vom 22. Sep 2005
Antwort Antwort
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
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#2

Re: Bildskalierung beim Ausdruck stimmt nicht

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

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

Re: Bildskalierung beim Ausdruck stimmt nicht

  Alt 22. Sep 2005, 14:40
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.
Björn
if all else fails - read the instructions
  Mit Zitat antworten Zitat
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#4

Re: Bildskalierung beim Ausdruck stimmt nicht

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

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

Re: Bildskalierung beim Ausdruck stimmt nicht

  Alt 22. Sep 2005, 15:07
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
Björn
if all else fails - read the instructions
  Mit Zitat antworten Zitat
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#6

Re: Bildskalierung beim Ausdruck stimmt nicht

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

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

Re: Bildskalierung beim Ausdruck stimmt nicht

  Alt 22. Sep 2005, 15:24
Hallo,

ok, dann versuche ich es erstmal mit den 96.

Danke erstmal.

cu
easywk
Björn
if all else fails - read the instructions
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:32 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