AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Bild drucken

Ein Thema von MCXSC · begonnen am 24. Apr 2006 · letzter Beitrag vom 26. Apr 2006
Antwort Antwort
MCXSC
(Gast)

n/a Beiträge
 
#1

Bild drucken

  Alt 24. Apr 2006, 21:12
Hallo!

Folgendes:

In einer TImage-Komponente habe ich eine Bilddatei mit dem JP(E)G-Forat geladen.

Nun will ich dieses Bild in FESTEN Maßen drucken lassen. Also die Druckgröße muss nicht der Größe des TImages entsprechen, sondern soll aus Integer-Konstanten gelesen werden.

Ich habe zwar einiges im Forum gefunden, allerdings funktionirt es nicht so, wie ich es will: meist wird der Ausdruck zu klein, aber nie so, wie ich die Größe angebe...

MCXSC
  Mit Zitat antworten Zitat
Benutzerbild von Mackhack
Mackhack

Registriert seit: 29. Nov 2003
Ort: San Diego, CA/USA
1.446 Beiträge
 
Delphi 2006 Architect
 
#2

Re: Bild drucken

  Alt 24. Apr 2006, 22:03
Hi,

du koenntest es %ual ausdrucken!
Um etwas Neues zu schaffen muss man seine Ohren vor den Nein-sagern verschliessen um seinen Geist öffnen zu können.
(George Lukas)
  Mit Zitat antworten Zitat
MCXSC
(Gast)

n/a Beiträge
 
#3

Re: Bild drucken

  Alt 24. Apr 2006, 22:11


Ich hab jetzt irgendwie nichts verstanden
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Bild drucken

  Alt 24. Apr 2006, 22:19
wie hast du es denn bisher probiert. Du müsstest in etwa so vorgehen:
- Maßheinheit für Druckercanvas umstellen (auf 10tel Millimeter etc.)
- Dein JPEG auf ein Bitmap bringen (zumindest brauchst du eine Canvas wo das Bild drauf ist)
- Das Bild/Canvas per StretchBlt auf die Canvas des Druckers übertragen.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.130 Beiträge
 
Delphi 10.3 Rio
 
#5

Re: Bild drucken

  Alt 26. Apr 2006, 08:04
Zitat von MCXSC:


Ich hab jetzt irgendwie nichts verstanden
Versuchs mal mit:

Delphi-Quellcode:
function TPrintForm.Screen2PrinterX(X:integer):integer;
 begin
   result := (X * LogX) div 96; // 96 ist bei mir das Bezugssystem
 end;

function TPrintForm.Screen2PrinterY(Y:Integer):integer;
 begin
   result := (Y * LogY) div 96; // 96 ist bei mir das Bezugssystem
 end;

Procedure TPrintForm.DoImage(ChildControl:TControl;Top,Left:integer);
var
  Info : PBitmapInfo;
  InfoSize : DWORD;
  Image : Pointer;
  ImageSize : DWORD;
  Bits : HBITMAP;
  DIBWidth,
  DIBHeight : Longint;


  begin

    LogX := GetDeviceCaps(Printer.Handle, LOGPIXELSX);
    LogY := GetDeviceCaps(Printer.Handle, LOGPIXELSY);


{$IFDEF JPEG}  
    if (ChildControl as TImage).Picture.Graphic is TJPEGImage
    then begin // Der einfache Weg. Um bessere Qualität zu erhalten, erst in BMP umwandeln und dann die andere Routine
           Printer.Canvas.StretchDraw(Rect(Screen2PrinterX(ChildControl.Left+Left)-Rand_Links,
                                           Screen2Printery(Top)-Rand_Oben,
                                           Screen2PrinterX(ChildControl.Left+Left)-Rand_Links+Screen2PrinterX(ChildControl.width),
                                           Screen2Printery(Top)-Rand_Oben+Screen2PrinterY(ChildControl.height)),
                                    (ChildControl as TImage).Picture.Graphic);
         end
    else begin {$ENDIF }
            Bits := (ChildControl as TImage).Picture.Bitmap.Handle;
            GetDIBSizes(Bits, InfoSize, ImageSize);
            Info := AllocMem(InfoSize);
            try
              Image := AllocMem(ImageSize);
              try
                GetDIB(Bits, 0, Info^, Image^);
                with Info^.bmiHeader do
                  begin
                    DIBWidth := biWidth;
                    DIBHeight := biHeight;
                  end;
                  StretchDIBits(Printer.Canvas.Handle,
                                Screen2PrinterX(ChildControl.Left+Left)-Rand_Links,
                                Screen2Printery(Top)-Rand_Oben,
                                Screen2PrinterX(ChildControl.width),
                                Screen2PrinterY(ChildControl.height),
                                0, 0, DIBWidth, DIBHeight, Image, Info^, DIB_RGB_COLORS, SRCCOPY);
              finally
                FreeMem(Image, ImageSize);
              end;
            finally
              FreeMem(Info, InfoSize);
            end;
{$IFDEF JPEG}
          end;
{$ENDIF}          
  end;
Die Procedure Druckt Imagekomponenten von einem Form welches in 96 DPI definiert ist.
die Koordinaten musst Du sicherlich auf Deine Wünsche anpassen...

mfg Frank
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Bild drucken

  Alt 26. Apr 2006, 08:40
Setz den MapMopde auf MM_LOMETRIC, dann kannst du alle angaben in Millimetern machen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  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 13:05 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