Announcement

Collapse
No announcement yet.

Bitmaps drucken

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Bitmaps drucken

    Hi,
    ich will eine Bitmap ausdrucken. Die Bitmap ist derzeit in eine Image-Komponente geladen und das Ausdrucken mit Printer()->Canas->Draw(x,y,Image->Picture->Bitmap); funktioniert nicht.
    Warum geht das nicht ???

    Wenn ich eine Bitmap mit new erzeuge und die Bitmap mit LoadFromFile lade, kann ich es ausdrucken, allerdings ist der Ausdruck wesentlich kleiner als das Original. Das eingescannte Bild wird dagegen von einen Bildverarbeitungsprogramm in der Originalgröße ausgedruckt.

    Was muß ich anstellen, um die Grafik einer Image-Komponente in der Originalgröße auszudrucken. Wie kann ich gegebenenfalls die Größe des Ausdruckes verändern.

    Danke - Peter

  • #2
    Das liegt an der Skalierung der Bildes.
    Der Bildschirm hat eine Auflösung von ca. 72 Punkten (Dots) pro Inch ->DPI.

    Dein Drucker wird wohl eine andere Auflösung haben. Je nach Drucker fest oder frei wählbar. Heutige Drucker haben wohl mindestens 600 dpi.

    Somit passiert folgendes wenn du ein Bild in einen Drucker-Canvas schreibst:

    Auf dem Bildschirm ist das Bild mit 72 dpi dargestellt. Wenn dieses Bild ohne Änderung in den Drucker-Canvas geschrieben wird, so wird es dort ebenfalls mit 72 dpi dargestellt. Bei einer Auflösung von 600 dpi ist das Bild also ca. 8 mal kleiner. Vor schreiben des Bildes in den Canvas muß abgefragt werden, wieviel dpi der Drucker hat und das Bild hochgerechnet werden. So machen das die Zeichenprogramme. Die achten auch darauf, dass beim hochrechnen keine unschönen Treppeneffekte (Grobes Bild) entstehen.

    Christia
    Christian

    Comment


    • #3
      Hi Christian,
      hast du ein Beispiel für so eine Umrechnung und wie bekommt man die Auflösung des Druckers heraus ?

      Bye - Pete

      Comment


      • #4
        Nein, ein Beispiel habe ich nicht, dass war mir bisher auch zuviel arbeit. Die Umrechung ist wohl nicht si problematisch (s.o.). Vielmehr das Bild so zu vergrößern, dass es immer noch gut aussieht (Antialaising).

        Die Breite der Seite ist eine Eigenschaft von TPrinter->PageWidth

        Schau mal bei TPrinter, da gibt es vielleicht noch andere nützliche Infos
        Christian

        Comment


        • #5
          Hi Peter,<br>
          probiere es mal hiermit.<br>
          <br>
          Prntr = Printer();<br>
          TRect Rect;<br>
          int dpiX = GetDeviceCaps(Prntr->Handle, LOGPIXELSX);<br>
          int dpiY = GetDeviceCaps(Prntr->Handle, LOGPIXELSY);<br>
          <br>
          Rect.Left = 0;<br>
          Rect.Top = 0;<br>
          Rect.Right = Rect.Left + Image1->Width * dpiX / 72;<br>
          Rect.Bottom = Rect.Top + Image1->Height * dpiY / 72;<br>
          <br>
          Prntr->BeginDoc();<br>
          Prntr->Canvas->StretchDraw(Rect, Image1->Picture->Graphic);<br>
          Prntr->EndDoc();<br>
          <br>
          // Image1 ist hier vom Typ TImage auf dem Formular<br>
          // für die Bildschirmauflösung habe ich pauschal 72 angenommen
          <br>
          <br>
          Chri

          Comment

          Working...
          X