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
January 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!



Thread

2008.01.16 22:44 "Q: TIFFWriteRawTile()", by Timur Ametov
2008.01.16 23:23 "Re: Q: TIFFWriteRawTile()", by Frank Warmerdam
2008.01.17 09:20 "Re: Q: TIFFWriteRawTile()", by Timur Ametov
2008.01.17 12:50 "Re: Q: TIFFWriteRawTile()", by Timur Ametov

2008.01.17 09:20 "Re: Q: TIFFWriteRawTile()", by Timur Ametov

Hello Frank,

I thank you so much for your response

> What version of libtiff are you using?

3.6.2 -> because of Dev C++.
Could it be reason?!

> Looking in the code I see that TIFFWriteRawTile() skips a bunch of stuff
> that is done by TIFFWriteEncodedTile() that might be important for
> rewriting
> tiles such as this:
> 
>     if( td->td_stripbytecount[tile] > 0 )
>          {
>         /* Force TIFFAppendToStrip() to consider placing data at end
>                 of file. */
>              tif->tif_curoff = 0;
>          }
> 
> I never use the "Raw" interfaces so it is entirely possible they are not
> functioning properly with regard to some of the update-in-place logic.
> But - in theory - it is intended that what you want should work if you
> open
> a file in update mode.

I tried now with TIFFWriteEncodedTile() also, but .. could you (or maybe
somebody else) make a loon on my code. God knows, maybe there is a mistake,
that nobody accept me would make :)

#include <windows.h>
#include <stdio.h>
#include <time.h>
#include "multibmp.h"
#include <tiffio.h>
#include <string.h>

int main()
{
    int width, height;
    width = 160;
    height = 160;
    char block[32*32];
    char block2[32*32];
    char block3[32*32];
    for (int i=0; i<sizeof(block);i++)
    {
        block[i]  = char(i/16 + 127);
        block2[i] = char(255);
        block3[i] = char();
    }

    TIFF *tif = TIFFOpen("d:/test/multiTIFF.tif", "w");

    TIFFSetField(tif, TIFFTAG_IMAGEWIDTH, width);
    TIFFSetField(tif, TIFFTAG_IMAGELENGTH, height);
    TIFFSetField(tif, TIFFTAG_XRESOLUTION, 150.0);
    TIFFSetField(tif, TIFFTAG_YRESOLUTION, 150.0);
    TIFFSetField(tif, TIFFTAG_BITSPERSAMPLE, 8);
    TIFFSetField(tif, TIFFTAG_SAMPLESPERPIXEL, 1);
    TIFFSetField(tif, TIFFTAG_ROWSPERSTRIP, 1);
    TIFFSetField(tif, TIFFTAG_TILEWIDTH, 32);
    TIFFSetField(tif, TIFFTAG_TILELENGTH, 32);
    TIFFSetField(tif, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_MINISBLACK);
    TIFFSetField(tif, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG);
    TIFFSetField(tif, TIFFTAG_RESOLUTIONUNIT, RESUNIT_INCH);

    tsize_t tileSize = TIFFTileSize(tif);
    int tile_nr = 0;

    for (int i=0; i<25; i=i+2)
    {
        tile_nr = i;
        TIFFWriteRawTile(tif, tile_nr, &block, tileSize);
    }

    for (int i=1; i<23; i=i+2)
    {
        tile_nr = i;
        TIFFWriteRawTile(tif, tile_nr, &block, tileSize);
    }
    TIFFClose(tif);

    // I also tried with "w"
    tif = TIFFOpen("d:/test/multiTIFF.tif", "a");
    TIFFSetField(tif, TIFFTAG_IMAGEWIDTH, width);
    TIFFSetField(tif, TIFFTAG_IMAGELENGTH, height);
    TIFFSetField(tif, TIFFTAG_XRESOLUTION, 150.0);
    TIFFSetField(tif, TIFFTAG_YRESOLUTION, 150.0);
    TIFFSetField(tif, TIFFTAG_BITSPERSAMPLE, 8);
    TIFFSetField(tif, TIFFTAG_SAMPLESPERPIXEL, 1);
    TIFFSetField(tif, TIFFTAG_ROWSPERSTRIP, 1);
    TIFFSetField(tif, TIFFTAG_TILEWIDTH, 32);
    TIFFSetField(tif, TIFFTAG_TILELENGTH, 32);
    TIFFSetField(tif, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_MINISBLACK);
    TIFFSetField(tif, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG);
    TIFFSetField(tif, TIFFTAG_RESOLUTIONUNIT, RESUNIT_INCH);

    for (int i=1; i<23; i=i+2)
    {
        tile_nr = i;
        TIFFWriteRawTile(tif, tile_nr, &block2, tileSize);
    }
    TIFFClose(tif);

    system("pause");
    return 0;
}

Thank you guys,

Tim
-- 
Psssst! Schon vom neuen GMX MultiMessenger gehört?
Der kann`s mit allen: http://www.gmx.net/de/go/multimessenger?did=10