AWARE SYSTEMS
TIFF and LibTiff Mail List Archive

Thread

2003.06.25 12:51 "RE: Pb with TIFFWriteScanline", by Rainer Wiesenfarth
2003.06.25 12:18 "Pb with TIFFWriteScanline", by Marine Martin-Guillerez
2003.08.18 05:44 "[Tiff] Crashes", by Javier Kohen
2003.08.18 06:28 "[Tiff] Crashes", by Andrey Kiselev
2003.08.18 07:20 "[Tiff] Crashes", by Javier Kohen

2003.06.25 12:18 "Pb with TIFFWriteScanline", by Marine Martin-Guillerez

For writing an image TIFF i use the following code:

CDEF (Filename, 256);
TIFF *ImageTiff, *ImageDst;

sprintf (Filename, "Image\\20030620_c.tif");
ImageTiff = TIFFOpen (Filename, "r");
ImageDst = TIFFOpen ("copy.tif","w");
if (ImageTiff)
{
 ULONG FileHeight, FileWidth, Band, FileBits, Compress;
 ULONG TileHeight, TileWidth, PlanarConf;

   FileHeight = FileWidth = Band = FileBits = Compress = 0;
   TileHeight = TileWidth = PlanarConf = 0;

   TIFFGetField (ImageTiff, TIFFTAG_IMAGEWIDTH, &FileWidth);
   TIFFGetField (ImageTiff, TIFFTAG_IMAGELENGTH, &FileHeight);
   TIFFGetField (ImageTiff, TIFFTAG_TILEWIDTH, &TileWidth);
   TIFFGetField (ImageTiff, TIFFTAG_TILELENGTH, &TileHeight);
   TIFFGetField (ImageTiff, TIFFTAG_BITSPERSAMPLE, &FileBits);
   TIFFGetField (ImageTiff, TIFFTAG_SAMPLESPERPIXEL, &Band);
   TIFFGetField (ImageTiff, TIFFTAG_COMPRESSION, &Compress);
   TIFFGetField (ImageTiff, TIFFTAG_PLANARCONFIG, &PlanarConf);

if (Compress != COMPRESSION_NONE)
 AfxMessageBox ("image compressée", MB_ICONSTOP);
else
{
 if (FileBits == 8)
 {
  BYTE *BufImage = new BYTE[FileWidth * FileHeight];
  ULONG x, y;

  // Lecture

     for (y = 0; y < FileHeight; y ++)

   TIFFReadScanline (ImageTiff, BufImage, y);

   // Modification

     for (y = FileHeight / 4; y < (3 * FileHeight / 4); y++)
      for (x = FileWidth / 4; x < (3 * FileWidth / 4); x++)

       BufImage[x + (y * FileWidth)] = 0;

     TIFFSetField (ImageDst, TIFFTAG_IMAGEWIDTH, FileWidth);
     TIFFSetField (ImageDst, TIFFTAG_IMAGELENGTH, FileHeight);
     TIFFSetField (ImageDst, TIFFTAG_BITSPERSAMPLE, FileBits);
     TIFFSetField (ImageDst, TIFFTAG_SAMPLESPERPIXEL, Band);

     TIFFSetField (ImageDst, TIFFTAG_COMPRESSION, Compress);

     // Ecriture

  if (BufImage != NULL)
   delete[] (BufImage);
  BufImage = NULL;
 }
 else if (FileBits == 16)
 {
  USHORT *BufImage = new USHORT[FileWidth * FileHeight];
  ULONG x, y;

  // Lecture

     for (y = 0; y < FileHeight; y ++)

   TIFFReadScanline (ImageTiff, BufImage, y);

   // Modification

     for (y = FileHeight / 4; y < (3 * FileHeight / 4); y++)
      for (x = FileWidth / 4; x < (3 * FileWidth / 4); x++)

       BufImage[x + (y * FileWidth)] = 0;

     // Ecriture

  try
  {

      TIFFSetField (ImageDst, TIFFTAG_IMAGEWIDTH, (int)FileWidth);
      TIFFSetField (ImageDst, TIFFTAG_IMAGELENGTH, FileHeight);
      TIFFSetField (ImageDst, TIFFTAG_BITSPERSAMPLE, FileBits);
      TIFFSetField (ImageDst, TIFFTAG_SAMPLESPERPIXEL, Band);

     TIFFSetField (ImageDst, TIFFTAG_COMPRESSION, Compress);

     for (y = 0; y < FileHeight; y ++)

  }
  catch (...)
  {
   CDEF (tmp, 256);
   sprintf (tmp, "erreur pour y = %d\n", y);
   AfxMessageBox (tmp, MB_ICONSTOP);
  }

   if (BufImage != NULL)
    delete[] (BufImage);
   BufImage = NULL;
  }
  else
  {
   AfxMessageBox ("ce n'est pas un image en niveau de gris", MB_ICONSTOP);
  }
 }
}
else
 AfxMessageBox ("pas d'image à ouvrir", MB_ICONSTOP);
TIFFClose (ImageTiff);
TIFFClose (ImageDst);

And when i run the application i've the following message:
TIFFWriteScanline: copy.tif: Must set 'ImageWidth" before writing data.
It seems to me i do that with TIFFSetField. I don't know where 's my error.
Someone's can help me, I'm a newbie.
Thanks for all and excuse me for my english, it's not my mother's tongue.