Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi DelphiTwain (https://www.delphipraxis.net/78337-delphitwain.html)

Lucky64 3. Okt 2006 13:39


DelphiTwain
 
Hi,
habe mal die Komponente DelphiTwain getestet und ein Problem damit.
Ich kann z.B die Scan-Auflösung auf 150x150 DPI einstellen, diese wird
auch korrekt angezeigt.
Unter TwainTwainAcquire wird mir Image zurückgegeben, welches ich als BMP speichere.
Dieses Image hat immer eine Auflösung von 96 DPI. Beim Ändern der
Scann-Auflösung (100x100dpi, 150x150dpi, 300x300dpi) ändert sich nur die Bildgröße, die
Auflösung bleibt immer bei 96 DPI. Ich möchte das Image aber im A4-Format mit 150 DPI speichern
und habe keine Ahnung wie ich vorgehen muß.

xaromz 3. Okt 2006 14:01

Re: DelphiTwain
 
Hallo und Herzlich Willkommen!
Zitat:

Zitat von Lucky64
Unter TwainTwainAcquire wird mir Image zurückgegeben, welches ich als BMP speichere.

Das Problem ist, dass unter Windows ein Bitmap standardmäßig immer eine Auflösung von 96 DPI besitzt. Da Du aber die tatsächliche Auflösung kennst, kannst Du das ja umrechnen.
Zum Speichern der tatsächlichen DPI-Größe kannst Du entweder den Bitmap-Header manuell anpassen (Bitmap in einen Stream laden und die Angaben schreiben), oder Du verwendest eine Komponente, die ein anderes Bildformat (z. B. PNG oder TIFF) zur Verfügung stellt und das Setzen der Auflösung zulässt. Das hätte auch den Vorteil, dass andere Formate wesentlich kleinere Dateien erzeugen.

Gruß
xaromz

Lucky64 3. Okt 2006 15:47

Re: DelphiTwain
 
Danke für die schnelle Antwort.
Gibt es vielleicht eine empfehlenswerte Komponente (möglichst Freeware)?
Ich nutze Jedi, habe dort aber nichts gefunden.
Die Unit [url=http://www.efg2.com/Lab/Library/UseNet/2000/0120a.txt/url]
ist vielleicht auch eine Lösung. Wenn ich das richtig verstanden habe, kann ich
einfach den Header überschreiben, um die Auflösung im BMP zu ändern.
Komprimiert speichern könnte ich dannach als JPG.

xaromz 3. Okt 2006 16:12

Re: DelphiTwain
 
Hallo,
Zitat:

Zitat von Lucky64
Gibt es vielleicht eine empfehlenswerte Komponente (möglichst Freeware)?

Eine Komponente kann ich Dir jetzt auch die Schnelle nicht nennen, aber schau doch mal bei Torry vorbei.
Zitat:

Zitat von Lucky64
Wenn ich das richtig verstanden habe, kann ich
einfach den Header überschreiben, um die Auflösung im BMP zu ändern.
Komprimiert speichern könnte ich dannach als JPG.

Genau.

Gruß
xaromz

Lucky64 3. Okt 2006 16:52

Re: DelphiTwain
 
Header überschreiben hat super geklappt. Ich dachte nicht, dass
es eine so einfache Lösung gibt.

mfg und Danke
Lucky64

Lucky64 3. Okt 2006 18:06

Re: DelphiTwain
 
Hi,

habe jetzt doch noch ein Problem. Das Speichern als BMP mit 150 DPI klappt.
Wenn ich das Image als JPG speichern will, wird es wieder als 96 DPI gespeichert.
Hier mal der Beispiel-Code.

Delphi-Quellcode:
procedure TForm1.TwainTwainAcquire(Sender: TObject;
  const Index: Integer; Image: TBitmap; var Cancel: Boolean);
var  j:tjpegimage;
begin
  SetBmpDPI(Image,150);           // Header überschreiben
  Image.SaveToFile('c:\testDPI.bmp');
  j:=tjpegimage.create;
  j.Assign(Image);
  j.SaveToFile('c:\testDPI.jpg');
  j.Free;
  Cancel := TRUE; {Only want one image}
end;
Gibt es für JPG vielleicht auch die Möglichkeit den Header zu überschreiben oder
eine andere Lösung?

xaromz 3. Okt 2006 18:20

Re: DelphiTwain
 
Hallo,

Du kannst natürlich ebenso bei einem JPEG den Header manipulieren. Leider kenne ich keine JPEG-Komponente, die eine Änderung der Auflösung erlaubt. Wenn Du etwas tiefer in das Windows-API einsteigen willst, kann ich Dir GDI+ empfehlen. Hier gibt es die Möglichkeit, die Auflösung zu ändern. Das ist aber natürlich etwas aufwendiger.

Gruß
xaromz

EWeiss 3. Okt 2006 18:23

Re: DelphiTwain
 
Zitat:

Zitat von Lucky64
Hi,

habe jetzt doch noch ein Problem. Das Speichern als BMP mit 150 DPI klappt.
Wenn ich das Image als JPG speichern will, wird es wieder als 96 DPI gespeichert.
Hier mal der Beispiel-Code.

Delphi-Quellcode:
procedure TForm1.TwainTwainAcquire(Sender: TObject;
  const Index: Integer; Image: TBitmap; var Cancel: Boolean);
var  j:tjpegimage;
begin
  SetBmpDPI(Image,150);           // Header überschreiben
  Image.SaveToFile('c:\testDPI.bmp');
  j:=tjpegimage.create;
  j.Assign(Image);
  j.SaveToFile('c:\testDPI.jpg');
  j.Free;
  Cancel := TRUE; {Only want one image}
end;
Gibt es für JPG vielleicht auch die Möglichkeit den Header zu überschreiben oder
eine andere Lösung?

Ich würde mich mal über die Kompremierungsmethode informieren
DPI könnte umterumständen damit beinflußt werden.


Zitat:

Header überschreiben hat super geklappt. Ich dachte nicht, dass
es eine so einfache Lösung gibt.
Header überschreiben gaukelt dir nur etwas vor.
Besser wird das Bild deshalb noch lange nicht!
Es ist nicht der Header sondern die Kompremierung bzw die Anzahl der Pixel was
die Qualität des Bildes ausmacht.

gruß

EWeiss 3. Okt 2006 18:24

Re: DelphiTwain
 
Zitat:

Zitat von Lucky64
Hi,

habe jetzt doch noch ein Problem. Das Speichern als BMP mit 150 DPI klappt.
Wenn ich das Image als JPG speichern will, wird es wieder als 96 DPI gespeichert.
Hier mal der Beispiel-Code.

Delphi-Quellcode:
procedure TForm1.TwainTwainAcquire(Sender: TObject;
  const Index: Integer; Image: TBitmap; var Cancel: Boolean);
var  j:tjpegimage;
begin
  SetBmpDPI(Image,150);           // Header überschreiben
  Image.SaveToFile('c:\testDPI.bmp');
  j:=tjpegimage.create;
  j.Assign(Image);
  j.SaveToFile('c:\testDPI.jpg');
  j.Free;
  Cancel := TRUE; {Only want one image}
end;
Gibt es für JPG vielleicht auch die Möglichkeit den Header zu überschreiben oder
eine andere Lösung?

Ich würde mich mal über die Kompremierungsmethode informieren
DPI könnte umterumständen damit beinflußt werden.


Zitat:

Header überschreiben hat super geklappt. Ich dachte nicht, dass
es eine so einfache Lösung gibt.
Header überschreiben gaukelt dir nur etwas vor.
Besser wird das Bild deshalb noch lange nicht!
Es ist nicht der Header sondern die Kompremierung bzw die Anzahl der Pixel was
die Qualität des Bildes ausmacht.

gruß

xaromz 3. Okt 2006 18:31

Re: DelphiTwain
 
Hllo,
Zitat:

Zitat von EWeiss
Ich würde mich mal über die Komprimierungsmethode informieren
DPI könnte umterumständen damit beinflußt werden.

Nein. Ich vermute, die JPEG-Komponente wertet die Angaben einfach nicht aus.
Zitat:

Zitat von EWeiss
Header überschreiben gaukelt dir nur etwas vor.
Besser wird das Bild deshalb noch lange nicht!
Es ist nicht der Header sondern die Komprimierung bzw die Anzahl der Pixel was
die Qualität des Bildes ausmacht.

Ich denke, das weiß er.

Gruß
xaromz


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:48 Uhr.
Seite 1 von 2  1 2      

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