Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   DBImage mit printpdf darstellen (https://www.delphipraxis.net/62523-dbimage-mit-printpdf-darstellen.html)

tom_po 6. Feb 2006 18:48

Re: DBImage mit printpdf darstellen
 
Liste der Anhänge anzeigen (Anzahl: 1)
hier das Originalbild, ein ScreenPrint von meiner Delphi-application

tom_po 6. Feb 2006 18:51

Re: DBImage mit printpdf darstellen
 
Hab's jetzt mal noch mit den anderen 2 Print-Procedures probiert. Funktioniert immer jetzt der Ausdruck, aber bei allen 3 Formen ist das Bild in die Länge verzerrt!

Delphi-Quellcode:
begin
 img := TImage.Create(nil);
  try
    Img.Picture.Bitmap.Assign(DBImage1.Picture.Bitmap);
    printpdf1.ImageOut(100,1100,Img);
    //printpdf1.ImageOut(100,1100,TImage(Img));
    //printpdf1.draw(100,1050, img);
  finally
    img.Free;
  end;
end;
Hast du noch ne Idee? Hat es mit dem Font zu tun? Hier der Font, den ich kurz vorher für die Memo verwende, die beim Ausdruck noch vor dem Bild kommt:

Delphi-Quellcode:
printpdf1.Font.Name:=poHelveticaBold;
printPDF1.Font.Size:=20;
printPDF1.MemoOut(50,940, Memo1);
Wie findest du ansonsten die tnpdf-Komponente?

Mit deinem Verlaub, sende ich an Nishita diesen Hinweis, er bittet ja in seinem Readme-File um Verbesserungen seiner Komponente. Ist dies ok für Dich, Marabu?

marabu 6. Feb 2006 19:08

Re: DBImage mit printpdf darstellen
 
Das Polo Shirt sieht ja aus, als wäre es bei 3.000 Umdrehungen geschleudert worden. Allerdings bevorzuge ich Hemden mit Überlänge. Wenn es wirklich dasselbe Shirt sein sollte, dann vermute ich, dass PrintPDF mit anderen Auflösungen arbeitet, als der Bildschirm. Ich könnte mir vorstellen, dass eine Vorbehandlung des Bildes im Hinblick auf die Ausgabe dem Effekt gegensteuern könnte. Und was die drei Zeilen für Nishita angeht - ich bin mir fast sicher, er wird kurz lächeln, wenn er deine Nachricht liest. Meinen Segen hast du.

Freundliche Grüße

marabu

tom_po 6. Feb 2006 19:16

Re: DBImage mit printpdf darstellen
 
Habe mich gekrümmt vor Lachen, jetzt wäre fast ich vom Stuhl gefallen...

Warum soll Nishita lachen? mal im Ernst...es hat ja gefehlt und zu dem nullpointer-Exception geführt...
Ok, bin halt noch totaler Laie...

Würdest du eigentlich das printpdf1.draw dem printpdf1.imageout vorziehen? beides funktioniert anscheinend gleich, das heisst der heisse Waschvorgang verzieht bei beiden das Polo!!
Was ist der Unterschied zwischen beiden procedures?

tom_po 6. Feb 2006 19:26

Re: DBImage mit printpdf darstellen
 
Liste der Anhänge anzeigen (Anzahl: 1)
habe jetzt das Bild aus der Datenbank auf die Hälfte "zusammengestaucht" und dann ein einigermassen passables Ergebnis bekommen.

Jedoch für den Anwender gefällt mir die Lösung noch nicht...

kann man das im tnpdf nirgendwo beeinflussen?

marabu 6. Feb 2006 19:33

Re: DBImage mit printpdf darstellen
 
Lachen wird Nishita wahrscheinlich nicht - aber lächeln. Wenn er noch was mit Delphi macht, dann weiß er, dass diese Zeilen Fehlen. Ich habe durch das einfügen nur dafür gesorgt, dass der fehlerfreie Zweig in SetBitmap() durchlaufen wird. Und Draw() ist nur eine Kapsel für ImageOut() - vielleicht war der Autor etwas unentschlossen bei der Namensgebung und hat dann einfach beides vorgesehen. Nimm ImageOut() und spare ein paar CPU-Zyklen.

Was die Vorbehandlung des Bildes angeht, so solltest du die Pixeldichte ermitteln und ins Verhältnis setzen. Vielleicht nützt dir dabei StretchBlt() - schau mal in die Online Hilfe zum Win32 SDK. Da gibt es auch Kapitel zum Stretchen von Bildern. Oder suche mal hier in der DP.

marabu

Ralf Stehle 9. Mär 2006 23:39

Problem mit der Bildauflösung: DBImage mit printpdf
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich weiß nicht ob sich noch jemand mit dem Thema beschäftigt. Ich habe die vorherigen Beispiele getestet und bin ganz glücklich mit Twain und printpdf ein Programm zu erstellen, welchese Textdokumente einscannt und als PDF speichert

Nur: je nach gewählter Auflösung beim Scannen passt das Bild nicht mehr in die DinA4-Seite.

Ich habe herausgefunden, dass diese Funktion die Größe berechnet. Was muss ich tun, damit hier immer eine DinA4-Seite herauskommt?

Delphi-Quellcode:
procedure TPrintPDF.ImageOut(X, Y: Integer; ABitmap:TImage);
var tempsx,tempsy:double;
begin

tempsx:=((PageWidth)/(WinProcs.GetDeviceCaps(GetDC(0), LOGPIXELSX)*8));
tempsy:=((PageHeight)/(WinProcs.GetDeviceCaps(GetDC(0), LOGPIXELSY)*10.625));

NumberofImages:=NumberofImages+1;
StreamWriteStr(TempStream,'q');
StreamWriteStr(TempStream,IntToStr(trunc(ABitmap.Picture.Bitmap.Width*tempsx))+
' 0 0 '+IntToStr(trunc(ABitmap.Picture.Bitmap.Height*tempsy))+
 ' '+IntToStr(X)+' '+IntToStr(PageHeight-Y-trunc(ABitmap.Picture.Bitmap.Height*tempsy))
 +' cm');
StreamWriteStr(TempStream,'/Im'+IntToStr(NumberofImages)+' Do');
StreamWriteStr(TempStream,'Q');
SetBitmap(ABitmap);
end;
Ralf


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:27 Uhr.
Seite 2 von 2     12   

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