![]() |
Multipage bei Tiff-Dateien
Hallo,
ich komme mal wieder nicht weiter :-( Ich schreib gerade ein Scann Programm mit der Komponenten DelphiTwain. Das klappt auch wunderbar und wird auch in einer Tiff-Datei gespeichert. Aber wenn man mehrere Dokumente scannt dann soll das in einer Tiff-Datei mit mehreren Seiten gespeichert werden. Dazu benutze ich die Klasse LibTiffDelphi ![]() Zur Testzwecken lasse ich den Scannvorgang erstmal aussenvor und versuche 2 Tiff-Dateien in einer zu speichern:
Delphi-Quellcode:
Kennt ihr eine Lösung?
procedure TForm_Scan.Button1Click(Sender: TObject);
var i : integer; mFileName,mFileName2 : string; OpenTiff,OpenTiff2: PTIFF; buf : pointer; row,R1,R2 : integer; begin mFileName := 'F:\temp\gescannteBilder\BMPTiff1.tiff'; mFileName2 := 'F:\temp\gescannteBilder\BMPTiff2.tiff'; OpenTiff := TIFFOpen(mFileName,'a'); OpenTiff2 := TIFFOpen(mFileName2,'r'); buf := _TIFFmalloc(TIFFScanlineSize(OpenTiff)); For i := 0 To row - 1 do begin R1 := LibTiffDelphi.TIFFReadScanline(OpenTiff2,Buf,i,0); R2 := LibTiffDelphi.TIFFWriteScanline(OpenTiff,Buf,i,0); //ShowMessage(IntToStr(R1) + ' ' + IntToStr(R2)); end; TIFFWriteDirectory(OpenTiff); _TIFFfree(buf); TIFFClose(OpenTiff); TIFFClose(OpenTiff2); end; Vielen Dank schon mal für eure Bemühungen |
Re: Multipage bei Tiff-Dateien
Das gehört hier glaub nich hin ;)
|
Re: Multipage bei Tiff-Dateien
:wall:
Eine ganz dumme Frage nebenbei: Wie kann ich das Thema verschieben? |
Re: Multipage bei Tiff-Dateien
Gar nicht. Musst du die Melde Funktion benutzen. (kleines Ausrufezeichen bei deinem ersten Beitrag). Nur Mods und der Admin können Beiträgs verschieben.
|
Re: Multipage bei Tiff-Dateien
Zitat:
für mich siehts so aus das die schleife nicht durchlaufen wird cya |
Re: Multipage bei Tiff-Dateien
Die Schleife läuft durch aber bei
Delphi-Quellcode:
ist der Rückgabewert -1. Das deutet auf einen Fehler hin.
R2 := LibTiffDelphi.TIFFWriteScanline(OpenTiff,Buf,i,0);
Aber ich weiß nicht warum. |
Re: Multipage bei Tiff-Dateien
öffnet
Delphi-Quellcode:
die datei vllt. nur lesend ?
TIFFOpen(...);
cya |
Re: Multipage bei Tiff-Dateien
Ich geben als Paramter 'w' für Write. So steht dass wohl in der Dokumentation.
Ich hab dass grad mit 'r' probiert aber das klappt auch nicht was auch logisch ist. |
DP-Maintenance
Dieses Thema wurde von "MrSpock" von "Neuen Beitrag zur Code-Library hinzufügen" nach "Multimedia" verschoben.
Ist ein Multimedia Thema. |
Re: Multipage bei Tiff-Dateien
ich hab ein verständnisproblem mit deiner variablen 'row':
Delphi-Quellcode:
die variable ist als int angegeben, aber es wird nie ein wert zugewiesen - oder ?
var i : integer;
mFileName,mFileName2 : string; OpenTiff,OpenTiff2: PTIFF; buf : pointer; row,R1,R2 : integer; begin und, hier
Delphi-Quellcode:
vermute ich das row irgendeinen wert hat, zB 10.000 - wenn aber nur 1.000 zeilen wirklich da sind
For i := 0 To row - 1 do begin
R1 := LibTiffDelphi.TIFFReadScanline(OpenTiff2,Buf,i,0); R2 := LibTiffDelphi.TIFFWriteScanline(OpenTiff,Buf,i,0); //ShowMessage(IntToStr(R1) + ' ' + IntToStr(R2)); end; dann versucht doch TIFFWriteLine zu schreiben obwohls es nicht geht und liefert -1 zurück. also ich hab erklärungsbedarf (auch für mich selbst wenn alles richtig ist ...) cya |
Re: Multipage bei Tiff-Dateien
Kein Problem.
Also die Variable row bekommt bei
Delphi-Quellcode:
den Wert.
LibTiffDelphi.TIFFGetField(OpenTiff2,TIFFTAG_IMAGELENGTH,row);
Es wird auch etwas gespeichert aber das wird so durcheinander gespeichert dass da kein Bild rauskommt. Bei
Delphi-Quellcode:
kommt schon ein Fehler, also der Rückgabewert ist -1 was ein Fehler ist denn es soll 1 rauskommen.
R2 := LibTiffDelphi.TIFFWriteScanline(OpenTiff,Buf,i,1);
|
Re: Multipage bei Tiff-Dateien
![]() |
Re: Multipage bei Tiff-Dateien
also, wo kommt denn das her ?
Delphi-Quellcode:
denn in deinem geposteten quellcode stehts ja nicht drin, oder ist dieser nur ein ausschnitt ?
LibTiffDelphi.TIFFGetField(OpenTiff2,TIFFTAG_IMAGELENGTH,row);
|
Re: Multipage bei Tiff-Dateien
OpenTiff2 ist ja die Quelldatei.
Mit dem Befehl LibTiffDelphi.TIFFGetField(OpenTiff2,TIFFTAG_PHOTO METRIC,Row); wird die Anzahl der Reihen von der Quelldatei geladen und in der Variable Row übergeben. So bekommt die Varable die Anzahl der Reihen von der Quelldatei damit man weiß wieviele Reihen "kopiert" werden soll. |
Re: Multipage bei Tiff-Dateien
Zitat:
in deiner geposteten btn methode
Delphi-Quellcode:
taucht doch der befehl gar nicht auf ...also wird er an anderer stelle verwendet ...
procedure TForm_Scan.Button1Click(Sender: TObject);
var i : integer; mFileName,mFileName2 : string; OpenTiff,OpenTiff2: PTIFF; buf : pointer; row,R1,R2 : integer; begin mFileName := 'F:\temp\gescannteBilder\BMPTiff1.tiff'; mFileName2 := 'F:\temp\gescannteBilder\BMPTiff2.tiff'; OpenTiff := TIFFOpen(mFileName,'a'); OpenTiff2 := TIFFOpen(mFileName2,'r'); buf := _TIFFmalloc(TIFFScanlineSize(OpenTiff)); For i := 0 To row - 1 do begin R1 := LibTiffDelphi.TIFFReadScanline(OpenTiff2,Buf,i,0); R2 := LibTiffDelphi.TIFFWriteScanline(OpenTiff,Buf,i,0); //ShowMessage(IntToStr(R1) + ' ' + IntToStr(R2)); end; TIFFWriteDirectory(OpenTiff); _TIFFfree(buf); TIFFClose(OpenTiff); TIFFClose(OpenTiff2); end; ich wollt nur wissen wo ? |
Re: Multipage bei Tiff-Dateien
oh sorry :oops:
Beim ganzen Testen habe ich dass einmal entfernt aber ich habe den Befehl drin
Delphi-Quellcode:
LibTiffDelphi.TIFFGetField(OpenTiff2,TIFFTAG_IMAGELENGTH,row); buf := _TIFFmalloc(TIFFScanlineSize(OpenTiff2)); For i := 0 To row - 1 do begin R1 := LibTiffDelphi.TIFFReadScanline(OpenTiff2,Buf,i,0); R2 := LibTiffDelphi.TIFFWriteScanline(OpenTiff,Buf,i,0); |
Re: Multipage bei Tiff-Dateien
Ich muss leider jetzt weg.
Wenn ihr eine Idee habt, also kann natürlich auch ohne diese Komponente sein, dann schreibt sie bitte. |
Re: Multipage bei Tiff-Dateien
Also ich bin zwar schon weitergekommen aber da ist noch ein Fehler.
Aber erstmal erwähne ich was der vorherige Fehler war: Man muss nämlich erst sogenannte Tags bzw. Fields definieren. Das hab ich jetzt gemacht. Hier erstmal der "neue" Code.
Delphi-Quellcode:
procedure TForm_Scan.Button1Click(Sender: TObject);
var i,R1,R2 : integer; mFileName,mFileName2,mtest : string; OpenTiff,OpenTiff2: PTIFF; buf : pointer; row, AddRow : integer; width, height,rows,cols,channels, Photo, BitsPerSam : ^integer; TileLen, TileWid, rowstrip : ^integer; begin mFileName := 'F:\temp\gescannteBilder\BMPTiff1.tiff'; mFileName2 := 'F:\temp\gescannteBilder\BMPTiff2.tiff'; New(rows); New(cols); New(channels); New(Photo); New(BitsPerSam); New(TileLen); New(TileWid); New(rowstrip); OpenTiff2 := TIFFOpen(mFileName2,'r'); TIFFGetField(OpenTiff2,TIFFTAG_IMAGELENGTH,rows); TIFFGetField(OpenTiff2,TIFFTAG_IMAGEWIDTH,cols); TIFFGetField(OpenTiff2,TIFFTAG_SAMPLESPERPIXEL,channels); TIFFGetField(OpenTiff2,TIFFTAG_PHOTOMETRIC,Photo); TIFFGetField(OpenTiff2,TIFFTAG_BITSPERSAMPLE,BitsPerSam); TIFFGetField(OpenTiff2,TIFFTAG_BITSPERSAMPLE,BitsPerSam); TIFFGetField(OpenTiff2,TIFFTAG_BITSPERSAMPLE,BitsPerSam); TIFFGetField(OpenTiff2,TIFFTAG_TILELENGTH,TileLen); TIFFGetField(OpenTiff2,TIFFTAG_TILEWIDTH,TileWid); TIFFGetField(OpenTiff2,TIFFTAG_ROWSPERSTRIP,rowstrip); buf := _TIFFmalloc(TIFFScanlineSize(OpenTiff2)); OpenTiff := TIFFOpen(mFileName,'a'); TIFFSetField(OpenTiff,TIFFTAG_IMAGEWIDTH,cols); TIFFSetField(OpenTiff,TIFFTAG_IMAGELENGTH,rows); TIFFSetField(OpenTiff,TIFFTAG_SAMPLESPERPIXEL,channels); TIFFSetField(OpenTiff,TIFFTAG_PHOTOMETRIC,Photo); TIFFSetField(OpenTiff,TIFFTAG_BITSPERSAMPLE,BitsPerSam); TIFFSetField(OpenTiff,TIFFTAG_TILELENGTH,TileLen); TIFFSetField(OpenTiff,TIFFTAG_TILEWIDTH,TileWid); TIFFSetField(OpenTiff,TIFFTAG_ROWSPERSTRIP,rowstrip); TIFFSetField(OpenTiff,TIFFTAG_PLANARCONFIG,PLANARCONFIG_CONTIG); row := TIFFScanlineSize(OpenTiff2); For i := 0 To row - 1 do begin R1 := LibTiffDelphi.TIFFReadScanline(OpenTiff2,Buf,i,1); R2 := LibTiffDelphi.TIFFWriteScanline(OpenTiff,Buf,i,1); end; TIFFWriteDirectory(OpenTiff); _TIFFfree(buf); TIFFClose(OpenTiff); TIFFClose(OpenTiff2); Dispose(rows); Dispose(cols); Dispose(channels); Dispose(Photo); Dispose(BitsPerSam); Dispose(TileLen); Dispose(TileWid); Dispose(rowstrip); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:25 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz