2008.07.23 13:11 "[Tiff] Convert Single-Page Tiff To Multipage Tiff - Delphi", by Michael Langer
Hallo,
I wan´t to combine some Tiff-Datas in a one Tiff-Data.
I work with LibTiffDelphi but I don´t understand something.
So I don´t know how I can to combine the Tiff-Datas.
In the following Code, I try it:
procedure TForm_Scan.ConGetTiff(SourceFile, DestFile: string;
Delete: Boolean);
var i,R1,R2,Anz,mSize, s, ns: integer;
OpenTiff,OpenTiff2: PTIFF;
mtest: string;
buf,buf2: pointer;
row, AddRow: integer;
width, height,rows,cols,channels, Photo, BitsPerSam,Pred: ^integer;
TileLen, TileWid, rowstrip, SamplePixel, Plan, Comp : ^integer;
xRes, yRes,ResU: ^integer;
StripIndex: Longword;
begin
New(rows);
New(cols);
New(channels);
New(Photo);
New(BitsPerSam);
New(TileLen);
New(TileWid);
New(rowstrip);
New(SamplePixel);
New(Plan);
New(xRes);
New(yRes);
New(ResU);
New(Pred);
New(Comp);
OpenTiff2 := TIFFOpen(SourceFile,'r');
TIFFGetField(OpenTiff2,TIFFTAG_IMAGELENGTH,rows);
TIFFGetField(OpenTiff2,TIFFTAG_IMAGEWIDTH,cols);
TIFFGetField(OpenTiff2,TIFFTAG_PHOTOMETRIC,Photo);
TIFFGetField(OpenTiff2,TIFFTAG_BITSPERSAMPLE,BitsPerSam);
TIFFGetField(OpenTiff2,TIFFTAG_SAMPLESPERPIXEL,SamplePixel);
TIFFGetField(OpenTiff2,TIFFTAG_XRESOLUTION,xRes);
TIFFGetField(OpenTiff2,TIFFTAG_YRESOLUTION,yRes);
TIFFGetField(OpenTiff2,TIFFTAG_RESOLUTIONUNIT,ResU);
TIFFGetField(OpenTiff2,TIFFTAG_TILELENGTH,TileLen);
TIFFGetField(OpenTiff2,TIFFTAG_TILEWIDTH,TileWid);
TIFFGetField(OpenTiff2,TIFFTAG_ROWSPERSTRIP,rowstrip);
TIFFGetField(OpenTiff2,TIFFTAG_PLANARCONFIG,Plan);
TIFFGetField(OpenTiff2,TIFFTAG_PREDICTOR,Pred);
TIFFGetField(OpenTiff2,TIFFTAG_COMPRESSION,Comp);
OpenTiff := TIFFOpen(DestFile,'a');
TIFFSetField(OpenTiff,TIFFTAG_IMAGEWIDTH,cols);
TIFFSetField(OpenTiff,TIFFTAG_IMAGELENGTH,rows);
TIFFSetField(OpenTiff,TIFFTAG_PHOTOMETRIC,PHOTOMETRIC_RGB);
TIFFSetField(OpenTiff,TIFFTAG_SAMPLESPERPIXEL,3);
TIFFSetField(OpenTiff,TIFFTAG_BITSPERSAMPLE,8);
TIFFSetField(OpenTiff,TIFFTAG_PLANARCONFIG,PLANARCONFIG_CONTIG);
TIFFSetField(OpenTiff,TIFFTAG_COMPRESSION,COMPRESSION_LZW);
TIFFSetField(OpenTiff,TIFFTAG_PREDICTOR,2);
TIFFSetField(OpenTiff,TIFFTAG_ROWSPERSTRIP,rowstrip);
mSize := TIFFStripSize(OpenTiff2);
buf2 := _TIFFmalloc(mSize);
StripIndex := 0;
ns := TIFFNumberOfStrips(OpenTiff2);
For s := 0 to ns - 1 do begin
R1 := TIFFReadEncodedStrip(OpenTiff2,s,buf2,
mSize);
R2 := TIFFWriteEncodedStrip(OpenTiff,s,buf2,
R1);
if (R2 < 0) then begin
ShowMessage('WriteEncodeStrip ist fehlgeschlagen');
end;
mtest := IntToStr(R1);
mtest := IntToStr(R2);
end;
buf := _TIFFmalloc(TIFFScanlineSize(OpenTiff2));
{
row := TIFFScanlineSize(OpenTiff2);
For i := 0 To rows^ - 1 do begin
R1 := LibTiffDelphi.TIFFReadScanline(OpenTiff2,Buf,i,1);
R2 := LibTiffDelphi.TIFFWriteScanline(OpenTiff,Buf,i,1);
if (R1 = -1) or (R2 = -1) then begin
mtest := IntToStr(R1);
mtest := IntToStr(row);
end;
mtest := IntToStr(R1);
mtest := IntToStr(R2);
end;
}
TiffWriteDirectory(OpenTiff);
TIFFClose(OpenTiff);
TIFFClose(OpenTiff2);
_TIFFfree(buf2);
_TIFFfree(buf);
Dispose(rows);
Dispose(cols);
Dispose(channels);
Dispose(Photo);
Dispose(BitsPerSam);
Dispose(TileLen);
Dispose(TileWid);
Dispose(rowstrip);
Dispose(SamplePixel);
Dispose(Plan);
Dispose(xRes);
Dispose(yRes);
Dispose(ResU);
Dispose(Pred);
Dispose(Comp);
end;
I hope you can help me.
I work with this Problem since 3 weeks.
P.S.
My English is not very well J but i h