AWARE [SYSTEMS] Imaging expertise for the Delphi developer
AWare Systems, Imaging expertise for the Delphi developer, Home TIFF and LibTiff Mailing List Archive

LibTiff Mailing List

TIFF and LibTiff Mailing List Archive
July 2008

Previous Thread
Next Thread

Previous by Thread
Next by Thread

Previous by Date
Next by Date

Contact

The TIFF Mailing List Homepage
This list is run by Frank Warmerdam
Archive maintained by AWare Systems



Valid HTML 4.01!



2008.07.23 13:11 "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 hope you understand me.