Changeset 221:b89e669daefd
- Timestamp:
- 10/10/2012 11:41:02 AM (8 years ago)
- Branch:
- default
- Phase:
- public
- Files:
-
- 2 added
- 2 deleted
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
libsrc/libbioimg/formats/tiff/dim_cz_lsm_format_io.cpp
r173 r221 23 23 #include "xstring.h" 24 24 25 void read_text_tag(TIFF *tif, TDimTiffIFD *ifd, DIM_UINT tag, MemIOBuf *outIOBuf); 26 25 void read_text_tag(bim::TinyTiff::IFD *ifd, DIM_UINT tag, MemIOBuf *outIOBuf); 27 26 28 27 //---------------------------------------------------------------------------- … … 216 215 if (tiffParams == NULL) return false; 217 216 if (tiffParams->dimTiff->tif_flags&TIFF_BIGTIFF) return false; 218 if (isTagPresentInFirstIFD( &tiffParams->ifds, TIFFTAG_CZ_LSMINFO ) == TRUE) return TRUE; 219 return FALSE; 217 return tiffParams->ifds.tagPresentInFirstIFD(TIFFTAG_CZ_LSMINFO); 220 218 } 221 219 222 220 void doSwabLSMINFO(CZ_LSMINFO *b) { 223 224 221 TIFFSwabArrayOfLong( (uint32*) &b->u32MagicNumber, 10 ); 225 222 TIFFSwabArrayOfDouble( (double*) &b->f64VoxelSizeX, 3 ); … … 241 238 if (tiffParams == NULL) return 1; 242 239 if (tiffParams->dimTiff == NULL) return 1; 243 if (tiffParams->ifds.count <= 0) return 1; 240 if (!tiffParams->ifds.isValid()) return 1; 241 bim::TinyTiff::IFD *ifd = tiffParams->ifds.firstIfd(); 242 if (!ifd) return 1; 244 243 245 244 TDimImageInfo *info = &tiffParams->info; … … 267 266 268 267 DIM_UCHAR *buf = NULL; 269 uint32 size, type; 270 if (!isTagPresentInFirstIFD( &tiffParams->ifds, TIFFTAG_CZ_LSMINFO )) return 1; 271 readTiffTag (tiffParams->dimTiff, &tiffParams->ifds.ifds[0], TIFFTAG_CZ_LSMINFO, size, type, &buf); 268 uint64 size; 269 uint16 type; 270 if (!ifd->tagPresent(TIFFTAG_CZ_LSMINFO )) return 1; 271 ifd->readTag(TIFFTAG_CZ_LSMINFO, size, type, &buf); 272 272 if ( (size <= 0) || (buf == NULL) ) return 1; 273 if (bi gendian) doSwabLSMINFO((CZ_LSMINFO *) buf);273 if (bim::TinyTiff::bigendian) doSwabLSMINFO((CZ_LSMINFO *) buf); 274 274 275 275 lsm->lsm_info = * (CZ_LSMINFO *) buf; 276 freeTiffTagBuf( &buf);276 _TIFFfree(buf); 277 277 278 278 //--------------------------------------------------------------- … … 281 281 memset( &lsm->lsm_colors, 0, sizeof(CZ_ChannelColors) ); 282 282 if (lsm->lsm_info.u32OffsetChannelColors > 0) { 283 readTiffBufNoAlloc( tiffParams->dimTiff,lsm->lsm_info.u32OffsetChannelColors, sizeof(CZ_ChannelColors), TIFF_LONG, (unsigned char *) &lsm->lsm_colors );283 ifd->readBufNoAlloc( lsm->lsm_info.u32OffsetChannelColors, sizeof(CZ_ChannelColors), TIFF_LONG, (unsigned char *) &lsm->lsm_colors ); 284 284 285 285 // here we have to assign channel names reading them from the file, but never seen this used... … … 297 297 memset( &lsm->lsm_TimeStamps, 0, sizeof(CZ_TimeStamps) ); 298 298 if (lsm->lsm_info.u32OffsetTimeStamps > 0) { 299 readTiffBufNoAlloc( tiffParams->dimTiff,lsm->lsm_info.u32OffsetTimeStamps, sizeof(CZ_TimeStamps), TIFF_LONG, (unsigned char *) &lsm->lsm_TimeStamps );299 ifd->readBufNoAlloc( lsm->lsm_info.u32OffsetTimeStamps, sizeof(CZ_TimeStamps), TIFF_LONG, (unsigned char *) &lsm->lsm_TimeStamps ); 300 300 301 301 // here we have to assign channel names reading them from the file, but never seen this used... … … 372 372 if (tif->tif_readproc((thandle_t) tif->tif_fd, &si, size) < (int) size) return 1; 373 373 374 if (bi gendian) {374 if (bim::TinyTiff::bigendian) { 375 375 TIFFSwabArrayOfLong( (uint32*) &si.u32Entry, 1 ); 376 376 TIFFSwabArrayOfLong( (uint32*) &si.u32Type, 1 ); … … 392 392 if (tiffParams == NULL) return; 393 393 if (tiffParams->dimTiff == NULL) return; 394 if ( tiffParams->ifds.count <= 0) return;394 if (!tiffParams->ifds.isValid()) return; 395 395 396 396 TDimImageInfo *info = &tiffParams->info; -
libsrc/libbioimg/formats/tiff/dim_fluoview_format_io.cpp
r191 r221 33 33 void change_0_to_n (char *str, long size); 34 34 35 void read_text_tag( TIFF *tif, TDimTiffIFD *ifd, DIM_UINT tag, MemIOBuf *outIOBuf);35 void read_text_tag(bim::TinyTiff::IFD *ifd, DIM_UINT tag, MemIOBuf *outIOBuf); 36 36 37 37 //---------------------------------------------------------------------------- … … 58 58 if (!tiffParams) return false; 59 59 if (tiffParams->dimTiff->tif_flags&TIFF_BIGTIFF) return false; 60 return ( isTagPresentInFirstIFD(&tiffParams->ifds,BIM_MMHEADER) &&61 isTagPresentInFirstIFD(&tiffParams->ifds,BIM_MMSTAMP) &&62 isTagPresentInFirstIFD(&tiffParams->ifds,BIM_MMUSERBLOCK) );60 return (tiffParams->ifds.tagPresentInFirstIFD(BIM_MMHEADER) && 61 tiffParams->ifds.tagPresentInFirstIFD(BIM_MMSTAMP) && 62 tiffParams->ifds.tagPresentInFirstIFD(BIM_MMUSERBLOCK) ); 63 63 } 64 64 … … 66 66 if (!tiffParams) return false; 67 67 if (tiffParams->dimTiff->tif_flags&TIFF_BIGTIFF) return false; 68 return ( isTagPresentInFirstIFD(&tiffParams->ifds,BIM_MMHEADER) &&69 isTagPresentInFirstIFD(&tiffParams->ifds,BIM_MMSTAMP) &&70 isTagPresentInFirstIFD(&tiffParams->ifds,BIM_ANDORBLOCK) );68 return (tiffParams->ifds.tagPresentInFirstIFD(BIM_MMHEADER) && 69 tiffParams->ifds.tagPresentInFirstIFD(BIM_MMSTAMP) && 70 tiffParams->ifds.tagPresentInFirstIFD(BIM_ANDORBLOCK) ); 71 71 } 72 72 … … 130 130 if (tiffParams == NULL) return 1; 131 131 if (tiffParams->dimTiff == NULL) return 1; 132 if ( tiffParams->ifds.count <= 0) return 1;132 if (!tiffParams->ifds.isValid()) return 1; 133 133 134 134 TDimImageInfo *info = &tiffParams->info; 135 135 DFluoviewInfo *fvi = &tiffParams->fluoviewInfo; 136 MM_HEAD *fvInfo; 137 138 if (!tiffParams->ifds.tagPresentInFirstIFD(BIM_MMHEADER)) return 1; 139 bim::TinyTiff::IFD *ifd = tiffParams->ifds.firstIfd(); 140 if (!ifd) return 1; 141 142 136 143 DIM_UCHAR *buf = NULL; 137 uint32 size, type; 138 MM_HEAD *fvInfo; 139 140 if (!isTagPresentInFirstIFD( &tiffParams->ifds, BIM_MMHEADER )) return 1; 141 142 readTiffTag (tiffParams->dimTiff, &tiffParams->ifds.ifds[0], BIM_MMHEADER, size, type, &buf); 144 uint64 size; 145 uint16 type; 146 ifd->readTag(BIM_MMHEADER, size, type, &buf); 143 147 if (!buf || size<sizeof(MM_HEAD)) return 1; 144 if (bi gendian) doSwabMMHEAD((MM_HEAD *) buf);148 if (bim::TinyTiff::bigendian) doSwabMMHEAD((MM_HEAD *) buf); 145 149 146 150 fvi->head = * (MM_HEAD *) buf; 147 freeTiffTagBuf( &buf);151 _TIFFfree(buf); 148 152 fvInfo = &fvi->head; 149 153 … … 191 195 tiffParams->info.depth = bitspersample; 192 196 193 TDimTiffIFD *ifd = &tiffParams->ifds.ifds[0];194 TIFF *tif = tiffParams->dimTiff;197 //TDimTiffIFD *ifd = &tiffParams->ifds.ifds[0]; 198 //TIFF *tif = tiffParams->dimTiff; 195 199 196 200 //-------------------------------------------------------------------- … … 201 205 fvi->sample_names[i] = xstring::xprintf( "Channel %d", i+1 ); 202 206 203 if (isTagPresentInIFD(ifd, 270)) { 204 uint32 buf_size, buf_type; 205 DIM_UCHAR *buf = NULL; 206 readTiffTag (tif, ifd, 270, buf_size, buf_type, &buf); 207 change_0_to_n ((char *) buf, buf_size); 207 if (ifd->tagPresent(270)) { 208 buf = NULL; 209 ifd->readTag (270, size, type, &buf); 210 change_0_to_n ((char *) buf, size); 208 211 209 212 // Extract channel names … … 260 263 261 264 262 freeTiffTagBuf( (DIM_UCHAR **) &buf);265 _TIFFfree(buf); 263 266 } 264 267 … … 291 294 // in fluoview luts are saved as INI text in tag: 270 - Image Description 292 295 void fluoviewInitPalette( DTiffParams *tiffParams, TDimImageInfo *info ) { 293 uint32 buf_size; 294 uint32 buf_type; 295 DIM_UCHAR *buf = NULL; 296 TIFF *tif = tiffParams->dimTiff; 297 TDimTiffIFD *ifd = &tiffParams->ifds.ifds[0]; 298 299 if (!tif) return; 300 if (!info) return; 296 if (!info && !tiffParams) return; 301 297 if (tiffParams->subType!=tstFluoview) return; 302 298 if (tiffParams->fluoviewInfo.ch > 1) return; 303 if (!isTagPresentInIFD(ifd, 270)) return; 304 305 readTiffTag (tif, ifd, 270, buf_size, buf_type, &buf); 299 300 bim::TinyTiff::IFD *ifd = tiffParams->ifds.firstIfd(); 301 if (!ifd) return; 302 if (!ifd->tagPresent(270)) return; 303 304 305 uint64 buf_size; 306 uint16 buf_type; 307 DIM_UCHAR *buf = NULL; 308 ifd->readTag (270, buf_size, buf_type, &buf); 306 309 change_0_to_n ((char *) buf, buf_size); 307 310 … … 319 322 info->lut.count = 256; 320 323 321 freeTiffTagBuf( (DIM_UCHAR **) &buf);324 _TIFFfree(buf); 322 325 } 323 326 … … 396 399 // Additional info from Tag 270 397 400 //---------------------------------------------------------------------------- 398 TDimTiffIFD *ifd = &tiffParams->ifds.ifds[0];399 TIFF *tif = tiffParams->dimTiff;400 xstring tag_270 = read_tag_as_string(tif, ifd,270);401 bim::TinyTiff::IFD *ifd = tiffParams->ifds.firstIfd(); 402 if (!ifd) return; 403 xstring tag_270 = ifd->readTagString(270); 401 404 402 405 //---------------------------------------------------------------------------- … … 456 459 // Additional info from Tag 270 457 460 //---------------------------------------------------------------------------- 458 TDimTiffIFD *ifd = &tiffParams->ifds.ifds[0];459 TIFF *tif = tiffParams->dimTiff;460 xstring tag_270 = read_tag_as_string(tif, ifd,270);461 bim::TinyTiff::IFD *ifd = tiffParams->ifds.firstIfd(); 462 if (!ifd) return; 463 xstring tag_270 = ifd->readTagString(270); 461 464 462 465 //---------------------------------------------------------------------------- -
libsrc/libbioimg/formats/tiff/dim_ometiff_format_io.cpp
r173 r221 30 30 bool omeTiffIsValid(DTiffParams *par) { 31 31 if (!par) return false; 32 if (par->dimTiff->tif_flags&TIFF_BIGTIFF) return false; 33 TDimTiffIFD *ifd = &par->ifds.ifds[0]; 34 TIFF *tif = par->dimTiff; 35 if (!tif) return false; 32 bim::TinyTiff::IFD *ifd = par->ifds.firstIfd(); 36 33 if (!ifd) return false; 37 38 if (!isTagPresentInFirstIFD( &par->ifds, TIFFTAG_IMAGEDESCRIPTION )) return false; 39 xstring tag_270 = read_tag_as_string(tif, ifd, TIFFTAG_IMAGEDESCRIPTION ); 34 if (!ifd->tagPresent(TIFFTAG_IMAGEDESCRIPTION )) return false; 35 xstring tag_270 = ifd->readTagString(TIFFTAG_IMAGEDESCRIPTION ); 40 36 if ( tag_270.contains("<OME") && tag_270.contains("<Image") && tag_270.contains("<Pixels") ) return true; 41 42 37 return false; 43 38 } … … 68 63 if (!par) return 1; 69 64 if (!par->dimTiff) return 1; 70 if (par->ifds.count <= 0) return 1;71 72 TDimTiffIFD *ifd = &par->ifds.ifds[0]; 65 bim::TinyTiff::IFD *ifd = par->ifds.firstIfd(); 66 if (!ifd) return false; 67 73 68 TIFF *tif = par->dimTiff; 74 if (!tif) return false;75 if (!ifd) return false;76 77 69 TDimImageInfo *info = &par->info; 78 70 DOMETiffInfo *ome = &par->omeTiffInfo; 79 71 80 72 // Read OME-XML from image description tag 81 if (!i sTagPresentInFirstIFD( &par->ifds,TIFFTAG_IMAGEDESCRIPTION )) return false;82 xstring tag_270 = read_tag_as_string(tif, ifd,TIFFTAG_IMAGEDESCRIPTION );73 if (!ifd->tagPresent(TIFFTAG_IMAGEDESCRIPTION )) return false; 74 xstring tag_270 = ifd->readTagString(TIFFTAG_IMAGEDESCRIPTION ); 83 75 if (tag_270.size()<=0) return false; 84 76 … … 269 261 if (!par->dimTiff) return 1; 270 262 if (par->subType != tstOmeTiff) return 1; 271 if (par->ifds.count <= 0) return 1; 272 273 TDimTiffIFD *ifd = &par->ifds.ifds[0]; 263 bim::TinyTiff::IFD *ifd = par->ifds.firstIfd(); 264 if (!ifd) return 1; 274 265 TIFF *tif = par->dimTiff; 275 266 if (!tif) return false; 276 if (!ifd) return false;277 267 278 268 TDimImageInfo *info = &par->info; … … 388 378 //---------------------------------------------------------------------------- 389 379 390 TDimTiffIFD *ifd = &par->ifds.ifds[0]; 380 bim::TinyTiff::IFD *ifd = par->ifds.firstIfd(); 381 if (!ifd) return 1; 391 382 TIFF *tif = par->dimTiff; 392 xstring tag_270 = read_tag_as_string(tif, ifd, TIFFTAG_IMAGEDESCRIPTION); 383 384 xstring tag_270 = ifd->readTagString(TIFFTAG_IMAGEDESCRIPTION); 393 385 if (tag_270.size()<=0) return 0; 394 386 hash->append_tag( bim::RAW_TAGS_PREFIX+"ome-tiff", tag_270 ); -
libsrc/libbioimg/formats/tiff/dim_psia_format_io.cpp
r173 r221 32 32 bool psiaIsTiffValid(DTiffParams *tiffParams) { 33 33 if (tiffParams == NULL) return FALSE; 34 if (tiffParams->dimTiff->tif_flags&TIFF_BIGTIFF) return false; 35 if ( isTagPresentInFirstIFD( &tiffParams->ifds, 50434 ) == TRUE) return TRUE;36 if ( isTagPresentInFirstIFD( &tiffParams->ifds, 50435 ) == TRUE) return TRUE;37 return FALSE;34 if (tiffParams->dimTiff->tif_flags&TIFF_BIGTIFF) return false; 35 if (tiffParams->ifds.tagPresentInFirstIFD(50434)) return true; 36 if (tiffParams->ifds.tagPresentInFirstIFD(50435)) return true; 37 return false; 38 38 } 39 39 … … 49 49 if (tiffParams == NULL) return 1; 50 50 if (tiffParams->dimTiff == NULL) return 1; 51 if (tiffParams->ifds.count <= 0) return 1; 52 53 DIM_UCHAR *buf = NULL; 54 uint32 size, type; 51 bim::TinyTiff::IFD *ifd = tiffParams->ifds.firstIfd(); 52 if (!ifd) return 1; 55 53 psiaInfoHeader *psiaInfo = &tiffParams->psiaInfo; 56 54 57 if (!isTagPresentInFirstIFD( &tiffParams->ifds, 50435 )) return 1; 58 59 readTiffTag (tiffParams->dimTiff, &tiffParams->ifds.ifds[0], 50435, size, type, &buf); 60 if ( (size <= 0) || (buf == NULL) ) return 1; 55 if (!ifd->tagPresent(50435)) return 1; 56 57 std::vector<uint8> bufv; 58 ifd->readTag(50435, &bufv); 59 if (bufv.size()<=0) return 1; 60 uint8 *buf = &bufv[0]; 61 61 62 62 psiaInfo->dfLPFStrength = * (DIM_FLOAT64 *) (buf + DIM_PSIA_OFFSET_LPFSSTRENGTH); … … 88 88 89 89 // if running the MSB machine (motorola, power pc) then swap 90 if (bi gendian) {90 if (bim::TinyTiff::bigendian) { 91 91 TIFFSwabDouble ( &psiaInfo->dfLPFStrength ); 92 92 TIFFSwabLong ( (uint32 *) &psiaInfo->bAutoFlatten ); … … 121 121 wstr2charcpy (psiaInfo->szUnitW, (char *) (buf + DIM_PSIA_OFFSET_UNIT), 8); 122 122 123 freeTiffTagBuf( &buf );124 125 123 return 0; 126 124 } … … 151 149 if (img == 0) return 1; 152 150 if (tiffParams->dimTiff == 0) return 1; 151 bim::TinyTiff::IFD *ifd = tiffParams->ifds.firstIfd(); 152 if (!ifd) return 1; 153 153 154 154 DIM_UINT sample = 0; 155 DIM_UCHAR *buf = NULL;156 uint32 size, type;157 155 register unsigned int y; 158 156 DIM_UCHAR *p, *p2; … … 168 166 // read actual image 169 167 //-------------------------------------------------------------------- 170 size = getImgSizeInBytes( img ); 171 readTiffTag (tiffParams->dimTiff, &tiffParams->ifds.ifds[0], 50434, size, type, &buf); 172 if ( (size <= 0) || (buf == NULL) ) return 1; 168 std::vector<uint8> bufv; 169 ifd->readTag(50434, &bufv); 170 if (bufv.size()<getImgSizeInBytes(img)) return 1; 171 uint8 *buf = &bufv[0]; 173 172 174 173 DIM_UINT32 line_size = img->i.width*2; … … 184 183 } 185 184 186 if (bigendian) //if (swabflag) 187 TIFFSwabArrayOfShort( (DIM_UINT16 *) img->bits[0], size/2 ); 188 freeTiffTagBuf( &buf ); 185 if (bim::TinyTiff::bigendian) 186 TIFFSwabArrayOfShort( (DIM_UINT16 *) img->bits[0], getImgSizeInBytes(img)/2 ); 189 187 190 188 // psia data is stored inverted … … 253 251 hash->append_tag( bim::CUSTOM_TAGS_PREFIX+"Z Offset", meta->dfZOffset ); 254 252 hash->append_tag( bim::CUSTOM_TAGS_PREFIX+"NCompression", (const int) meta->ncompression ); 255 256 257 TIFF *tif = tiffParams->dimTiff; 258 TDimTiffIFD *ifd = &tiffParams->ifds.ifds[0]; 259 xstring psia_comments = read_tag_as_string(tif, ifd, 50436); 253 254 bim::TinyTiff::IFD *ifd = tiffParams->ifds.firstIfd(); 255 if (!ifd) return 1; 256 xstring psia_comments = ifd->readTagString(50436); 260 257 if (psia_comments.size()>0) 261 258 hash->append_tag( bim::CUSTOM_TAGS_PREFIX+"Comments", psia_comments ); -
libsrc/libbioimg/formats/tiff/dim_stk_format_io.cpp
r173 r221 398 398 399 399 bool stkIsTiffValid(DTiffParams *tiffParams) { 400 if (tiffParams == NULL) return FALSE;401 if (tiffParams->dimTiff->tif_flags&TIFF_BIGTIFF) return FALSE;400 if (tiffParams == NULL) return false; 401 if (tiffParams->dimTiff->tif_flags&TIFF_BIGTIFF) return false; 402 402 403 403 // if tag 33629 exists then the file is valid STAK file 404 if ( isTagPresentInFirstIFD( &tiffParams->ifds, 33629 ) == TRUE) return TRUE;405 if ( isTagPresentInFirstIFD( &tiffParams->ifds, 33630 ) == TRUE) return TRUE;406 if ( isTagPresentInFirstIFD( &tiffParams->ifds, 33631 ) == TRUE) return TRUE;407 408 return FALSE;404 if (tiffParams->ifds.tagPresentInFirstIFD(33629)) return true; 405 if (tiffParams->ifds.tagPresentInFirstIFD(33630)) return true; 406 if (tiffParams->ifds.tagPresentInFirstIFD(33631)) return true; 407 408 return false; 409 409 } 410 410 411 411 template<typename Tb, typename To> 412 void copy_clean_tag_buffer( Tb **buf, u nsigned intsize_in_bytes, To **out ) {412 void copy_clean_tag_buffer( Tb **buf, uint64 size_in_bytes, To **out ) { 413 413 if (!*buf) return; 414 u nsigned intn = size_in_bytes / sizeof(Tb);415 u nsigned intout_size_in_bytes = n * sizeof(To);414 uint64 n = size_in_bytes / sizeof(Tb); 415 uint64 out_size_in_bytes = n * sizeof(To); 416 416 *out = (To *) _TIFFmalloc( out_size_in_bytes ); 417 417 … … 445 445 if (tiffParams->subType != tstStk) return; 446 446 447 TDimTiffIFD *ifd = &tiffParams->ifds.ifds[0];447 bim::TinyTiff::IFD *ifd = tiffParams->ifds.firstIfd(); 448 448 int N = tiffParams->stkInfo.metaData.N; 449 uint32 tag = 0;450 449 451 450 // ----------------------------- 452 451 // read Strip Offsets 453 452 // ----------------------------- 454 tag = 273;455 if (i sTagPresentInFirstIFD( &tiffParams->ifds, tag ) == TRUE) {456 uint32 *buf=NULL , size=0,type=0;457 readTiffTag ( tif, ifd,tag, size, type, (DIM_UCHAR **) &buf );453 uint16 tag = 273; 454 if (ifd->tagPresent(tag)) { 455 uint32 *buf=NULL; uint64 size=0; uint16 type=0; 456 ifd->readTag(tag, size, type, (DIM_UCHAR **) &buf ); 458 457 copy_clean_tag_buffer<uint32, D_TIFF_OFFS_TYPE>( &buf, size, &stkInfo->strip_offsets ); 459 458 … … 464 463 // ----------------------------- 465 464 tag = 279; 466 if (i sTagPresentInFirstIFD( &tiffParams->ifds, tag ) == TRUE) {467 uint32 *buf=NULL , size=0,type=0;468 readTiffTag ( tif, ifd,tag, size, type, (DIM_UCHAR **) &buf );465 if (ifd->tagPresent(tag)) { 466 uint32 *buf=NULL; uint64 size=0; uint16 type=0; 467 ifd->readTag(tag, size, type, (DIM_UCHAR **) &buf ); 469 468 copy_clean_tag_buffer<uint32, D_TIFF_BCNT_TYPE>( &buf, size, &stkInfo->strip_bytecounts ); 470 469 } // strip_bytecounts … … 490 489 491 490 DStkInfo *stkInfo = &tiffParams->stkInfo; 492 TDimTiffIFD *ifd = &tiffParams->ifds.ifds[0]; 491 bim::TinyTiff::IFD *ifd = tiffParams->ifds.firstIfd(); 492 if (!ifd) return; 493 493 494 494 // read UIC2 495 int tag = 33629; 496 if (isTagPresentInFirstIFD( &tiffParams->ifds, tag ) != TRUE) return; 497 else 498 { 499 DIM_INT32 i; 500 DIM_INT32 N = stkInfo->metaData.N; 501 DIM_UINT32 *buf = NULL; 502 readTiffCustomTag (tiffParams->dimTiff, ifd, tag, 6*N*sizeof(DIM_INT32), DIM_TAG_LONG, (DIM_UCHAR **) &buf); 503 if (buf == NULL) return; 504 505 for (i=0; i<N; i++) { 506 stkInfo->metaData.zDistance[i].num = buf[i*6+0]; 507 stkInfo->metaData.zDistance[i].den = buf[i*6+1]; 508 stkInfo->metaData.creationDate[i] = buf[i*6+2]; 509 stkInfo->metaData.creationTime[i] = buf[i*6+3]; 510 stkInfo->metaData.modificationDate[i] = buf[i*6+4]; 511 stkInfo->metaData.modificationTime[i] = buf[i*6+5]; 512 } 513 514 freeTiffTagBuf( (DIM_UCHAR **) &buf ); 515 } 495 uint16 tag = 33629; 496 if (!ifd->tagPresent(tag)) return; 497 498 DIM_INT32 i; 499 DIM_INT32 N = stkInfo->metaData.N; 500 DIM_UINT32 *buf = NULL; 501 ifd->readTagCustom (tag, 6*N*sizeof(DIM_INT32), DIM_TAG_LONG, (DIM_UCHAR **) &buf); 502 if (buf == NULL) return; 503 504 for (i=0; i<N; i++) { 505 stkInfo->metaData.zDistance[i].num = buf[i*6+0]; 506 stkInfo->metaData.zDistance[i].den = buf[i*6+1]; 507 stkInfo->metaData.creationDate[i] = buf[i*6+2]; 508 stkInfo->metaData.creationTime[i] = buf[i*6+3]; 509 stkInfo->metaData.modificationDate[i] = buf[i*6+4]; 510 stkInfo->metaData.modificationTime[i] = buf[i*6+5]; 511 } 512 513 _TIFFfree(buf); 516 514 } 517 515 … … 528 526 529 527 DStkInfo *stkInfo = &tiffParams->stkInfo; 530 TDimTiffIFD *ifd = &tiffParams->ifds.ifds[0]; 528 bim::TinyTiff::IFD *ifd = tiffParams->ifds.firstIfd(); 529 if (!ifd) return; 531 530 532 531 // read UIC3 533 int tag = 33630; 534 if (isTagPresentInFirstIFD( &tiffParams->ifds, tag ) != TRUE) return; 535 else 532 uint16 tag = 33630; 533 if (!ifd->tagPresent(tag)) return; 534 DIM_INT32 i=0; 535 DIM_INT32 N = tiffParams->stkInfo.metaData.N; 536 DIM_UINT32 *buf = NULL; 537 538 ifd->readTagCustom (tag, 2*N*sizeof(DIM_UINT32), DIM_TAG_LONG, (DIM_UCHAR **) &buf); 539 if (buf == NULL) return; 540 541 for (i=0; i<N; i++) 536 542 { 537 DIM_INT32 i=0; 538 DIM_INT32 N = tiffParams->stkInfo.metaData.N; 539 DIM_UINT32 *buf = NULL; 540 541 readTiffCustomTag (tiffParams->dimTiff, ifd, tag, 2*N*sizeof(DIM_UINT32), DIM_TAG_LONG, (DIM_UCHAR **) &buf); 542 if (buf == NULL) return; 543 544 for (i=0; i<N; i++) 545 { 546 stkInfo->metaData.wavelength[i].num = buf[i*2]; 547 stkInfo->metaData.wavelength[i].den = buf[i*2+1]; 548 } 549 550 freeTiffTagBuf( (DIM_UCHAR **) &buf ); 551 } 543 stkInfo->metaData.wavelength[i].num = buf[i*2]; 544 stkInfo->metaData.wavelength[i].den = buf[i*2+1]; 545 } 546 547 _TIFFfree(buf); 552 548 } 553 549 … … 573 569 574 570 DStkInfo *stkInfo = &tiffParams->stkInfo; 575 TDimTiffIFD *ifd = &tiffParams->ifds.ifds[0]; 571 bim::TinyTiff::IFD *ifd = tiffParams->ifds.firstIfd(); 572 if (!ifd) return; 576 573 577 574 // read UIC4 578 int tag = TIFFTAG_STK_UIC4; 579 if (isTagPresentInFirstIFD( &tiffParams->ifds, tag ) == TRUE) { 580 581 DIM_INT32 N = stkInfo->metaData.N; 582 short tag_id; 583 std::vector<unsigned char> buffer; 584 int32 data_offset = getTiffTagOffset(tiffParams->dimTiff, ifd, tag); 585 586 while (data_offset != 0) { 587 // first read key for a tuple 588 if ( readTiffBufNoAlloc (tiffParams->dimTiff, data_offset, 2, TIFF_SHORT, (uchar *) &tag_id) != 0) break; 589 //safeguard, currently i only know of keys <= 45, stop otherwise 590 if (tag_id == 0 || tag_id > DIM_STK_CameraChipOffset) break; 591 data_offset += 2; 592 593 if (tag_id == DIM_STK_StagePosition) { 594 int buf_size = N*4*sizeof(uint32); 595 if (buffer.size() < buf_size) buffer.resize(buf_size); 596 DIM_INT32 *buf = (DIM_INT32 *) &buffer[0]; 597 if ( readTiffBufNoAlloc (tiffParams->dimTiff, data_offset, buf_size, TIFF_LONG, (unsigned char *) buf ) != 0) break; 598 data_offset += buf_size; 599 for (int i=0; i<N; ++i) { 600 stkInfo->metaData.StagePositionX[i].num = buf[i*4+0]; 601 stkInfo->metaData.StagePositionX[i].den = buf[i*4+1]; 602 stkInfo->metaData.StagePositionY[i].num = buf[i*4+2]; 603 stkInfo->metaData.StagePositionY[i].den = buf[i*4+3]; 604 } 605 continue; 606 } // tag DIM_STK_StagePosition 607 608 if (tag_id == DIM_STK_CameraChipOffset) { 609 int buf_size = N*4*sizeof(uint32); 610 if (buffer.size() < buf_size) buffer.resize(buf_size); 611 DIM_INT32 *buf = (DIM_INT32 *) &buffer[0]; 612 if ( readTiffBufNoAlloc (tiffParams->dimTiff, data_offset, buf_size, TIFF_LONG, (unsigned char *) buf ) != 0) break; 613 data_offset += buf_size; 614 for (int i=0; i<N; ++i) { 615 stkInfo->metaData.CameraChipOffsetX[i].num = buf[i*4+0]; 616 stkInfo->metaData.CameraChipOffsetX[i].den = buf[i*4+1]; 617 stkInfo->metaData.CameraChipOffsetY[i].num = buf[i*4+2]; 618 stkInfo->metaData.CameraChipOffsetY[i].den = buf[i*4+3]; 619 } 620 continue; 621 } // tag DIM_STK_CameraChipOffset 622 } // while 623 } 575 uint16 tag = TIFFTAG_STK_UIC4; 576 if (!ifd->tagPresent(tag)) return; 577 578 DIM_INT32 N = stkInfo->metaData.N; 579 short tag_id; 580 std::vector<unsigned char> buffer; 581 int64 data_offset = ifd->tagOffset(tag); 582 583 while (data_offset != 0) { 584 // first read key for a tuple 585 if (ifd->readBufNoAlloc(data_offset, 2, TIFF_SHORT, (uint8 *) &tag_id) != 0) break; 586 //safeguard, currently i only know of keys <= 45, stop otherwise 587 if (tag_id == 0 || tag_id > DIM_STK_CameraChipOffset) break; 588 data_offset += 2; 589 590 if (tag_id == DIM_STK_StagePosition) { 591 int buf_size = N*4*sizeof(uint32); 592 if (buffer.size() < buf_size) buffer.resize(buf_size); 593 DIM_INT32 *buf = (DIM_INT32 *) &buffer[0]; 594 if (ifd->readBufNoAlloc(data_offset, buf_size, TIFF_LONG, (unsigned char *) buf) != 0) break; 595 data_offset += buf_size; 596 for (int i=0; i<N; ++i) { 597 stkInfo->metaData.StagePositionX[i].num = buf[i*4+0]; 598 stkInfo->metaData.StagePositionX[i].den = buf[i*4+1]; 599 stkInfo->metaData.StagePositionY[i].num = buf[i*4+2]; 600 stkInfo->metaData.StagePositionY[i].den = buf[i*4+3]; 601 } 602 continue; 603 } // tag DIM_STK_StagePosition 604 605 if (tag_id == DIM_STK_CameraChipOffset) { 606 int buf_size = N*4*sizeof(uint32); 607 if (buffer.size() < buf_size) buffer.resize(buf_size); 608 DIM_INT32 *buf = (DIM_INT32 *) &buffer[0]; 609 if (ifd->readBufNoAlloc(data_offset, buf_size, TIFF_LONG, (unsigned char *) buf ) != 0) break; 610 data_offset += buf_size; 611 for (int i=0; i<N; ++i) { 612 stkInfo->metaData.CameraChipOffsetX[i].num = buf[i*4+0]; 613 stkInfo->metaData.CameraChipOffsetX[i].den = buf[i*4+1]; 614 stkInfo->metaData.CameraChipOffsetY[i].num = buf[i*4+2]; 615 stkInfo->metaData.CameraChipOffsetY[i].den = buf[i*4+3]; 616 } 617 continue; 618 } // tag DIM_STK_CameraChipOffset 619 } // while 624 620 } 625 621 … … 640 636 641 637 void stkReadStringEntry(DIM_INT32 offset, DTiffParams *tiffParams, char **string) { 642 //DStkInfo *stkInfo = &tiffParams->stkInfo;643 TIFF *tif = tiffParams->dimTiff;644 638 if (offset <= 0) return; 639 bim::TinyTiff::IFD *ifd = tiffParams->ifds.firstIfd(); 640 if (!ifd) return; 645 641 646 642 DIM_INT32 size; 647 readTiffBufNoAlloc (tif,offset, sizeof( DIM_INT32 ), DIM_TAG_LONG, (DIM_UCHAR *) &size);643 ifd->readBufNoAlloc( offset, sizeof( DIM_INT32 ), DIM_TAG_LONG, (DIM_UCHAR *) &size); 648 644 *string = (char *) _TIFFmalloc( size+1 ); 649 645 (*string)[size] = '\0'; 650 readTiffBufNoAlloc (tif,offset+sizeof( DIM_INT32 ), size, DIM_TAG_LONG, (DIM_UCHAR *) (*string));646 ifd->readBufNoAlloc( offset+sizeof( DIM_INT32 ), size, DIM_TAG_LONG, (DIM_UCHAR *) (*string)); 651 647 } 652 648 653 649 void stkParseIDEntry(DIM_INT32 *pair, DIM_INT32 offset, DTiffParams *tiffParams) { 654 650 DStkInfo *stkInfo = &tiffParams->stkInfo; 655 //TDimTiffIFD *ifd = &tiffParams->ifds.ifds[0];656 TIFF *tif = tiffParams->dimTiff;651 bim::TinyTiff::IFD *ifd = tiffParams->ifds.firstIfd(); 652 if (!ifd) return; 657 653 658 654 if (pair[0] == DIM_STK_AutoScale) … … 669 665 670 666 if (pair[0] == DIM_STK_XCalibration) 671 readTiffBufNoAlloc (tif,pair[1], 2*sizeof( DIM_INT32 ), DIM_TAG_LONG, (DIM_UCHAR *) stkInfo->metaData.XCalibration);667 ifd->readBufNoAlloc( pair[1], 2*sizeof( DIM_INT32 ), DIM_TAG_LONG, (DIM_UCHAR *) stkInfo->metaData.XCalibration); 672 668 673 669 if (pair[0] == DIM_STK_YCalibration) 674 readTiffBufNoAlloc (tif,pair[1], 2*sizeof( DIM_INT32 ), DIM_TAG_LONG, (DIM_UCHAR *) stkInfo->metaData.YCalibration);670 ifd->readBufNoAlloc( pair[1], 2*sizeof( DIM_INT32 ), DIM_TAG_LONG, (DIM_UCHAR *) stkInfo->metaData.YCalibration); 675 671 676 672 if (pair[0] == DIM_STK_CalibrationUnits) … … 702 698 703 699 if (pair[0] == DIM_STK_CreateTime) 704 readTiffBufNoAlloc (tif,pair[1], 2*sizeof( DIM_INT32 ), DIM_TAG_LONG, (DIM_UCHAR *) stkInfo->metaData.CreateTime);700 ifd->readBufNoAlloc( pair[1], 2*sizeof( DIM_INT32 ), DIM_TAG_LONG, (DIM_UCHAR *) stkInfo->metaData.CreateTime); 705 701 706 702 if (pair[0] == DIM_STK_LastSavedTime) 707 readTiffBufNoAlloc (tif,pair[1], 2*sizeof( DIM_INT32 ), DIM_TAG_LONG, (DIM_UCHAR *) stkInfo->metaData.LastSavedTime);703 ifd->readBufNoAlloc( pair[1], 2*sizeof( DIM_INT32 ), DIM_TAG_LONG, (DIM_UCHAR *) stkInfo->metaData.LastSavedTime); 708 704 709 705 if (pair[0] == DIM_STK_currentBuffer) … … 717 713 718 714 if (pair[0] == DIM_STK_grayX) 719 readTiffBufNoAlloc (tif,pair[1], 2*sizeof( DIM_INT32 ), DIM_TAG_LONG, (DIM_UCHAR *) stkInfo->metaData.grayX);715 ifd->readBufNoAlloc( pair[1], 2*sizeof( DIM_INT32 ), DIM_TAG_LONG, (DIM_UCHAR *) stkInfo->metaData.grayX); 720 716 721 717 if (pair[0] == DIM_STK_grayY) 722 readTiffBufNoAlloc (tif,pair[1], 2*sizeof( DIM_INT32 ), DIM_TAG_LONG, (DIM_UCHAR *) stkInfo->metaData.grayY);718 ifd->readBufNoAlloc( pair[1], 2*sizeof( DIM_INT32 ), DIM_TAG_LONG, (DIM_UCHAR *) stkInfo->metaData.grayY); 723 719 724 720 if (pair[0] == DIM_STK_grayMin) 725 readTiffBufNoAlloc (tif,pair[1], 2*sizeof( DIM_INT32 ), DIM_TAG_LONG, (DIM_UCHAR *) stkInfo->metaData.grayMin);721 ifd->readBufNoAlloc( pair[1], 2*sizeof( DIM_INT32 ), DIM_TAG_LONG, (DIM_UCHAR *) stkInfo->metaData.grayMin); 726 722 727 723 if (pair[0] == DIM_STK_grayMax) 728 readTiffBufNoAlloc (tif,pair[1], 2*sizeof( DIM_INT32 ), DIM_TAG_LONG, (DIM_UCHAR *) stkInfo->metaData.grayMax);724 ifd->readBufNoAlloc( pair[1], 2*sizeof( DIM_INT32 ), DIM_TAG_LONG, (DIM_UCHAR *) stkInfo->metaData.grayMax); 729 725 730 726 if (pair[0] == DIM_STK_grayUnitName) … … 735 731 736 732 if (pair[0] == DIM_STK_AutoScaleLoInfo) 737 readTiffBufNoAlloc (tif,pair[1], 2*sizeof( DIM_INT32 ), DIM_TAG_LONG, (DIM_UCHAR *) stkInfo->metaData.AutoScaleLoInfo);733 ifd->readBufNoAlloc( pair[1], 2*sizeof( DIM_INT32 ), DIM_TAG_LONG, (DIM_UCHAR *) stkInfo->metaData.AutoScaleLoInfo); 738 734 739 735 if (pair[0] == DIM_STK_AutoScaleHiInfo) 740 readTiffBufNoAlloc (tif,pair[1], 2*sizeof( DIM_INT32 ), DIM_TAG_LONG, (DIM_UCHAR *) stkInfo->metaData.AutoScaleHiInfo);736 ifd->readBufNoAlloc( pair[1], 2*sizeof( DIM_INT32 ), DIM_TAG_LONG, (DIM_UCHAR *) stkInfo->metaData.AutoScaleHiInfo); 741 737 742 738 if (pair[0] == DIM_STK_Gamma) 743 readTiffBufNoAlloc (tif,pair[1], sizeof( DIM_INT32 ), DIM_TAG_LONG, (DIM_UCHAR *) &stkInfo->metaData.Gamma);739 ifd->readBufNoAlloc( pair[1], sizeof( DIM_INT32 ), DIM_TAG_LONG, (DIM_UCHAR *) &stkInfo->metaData.Gamma); 744 740 745 741 if (pair[0] == DIM_STK_GammaRed) 746 readTiffBufNoAlloc (tif,pair[1], sizeof( DIM_INT32 ), DIM_TAG_LONG, (DIM_UCHAR *) &stkInfo->metaData.GammaRed);742 ifd->readBufNoAlloc( pair[1], sizeof( DIM_INT32 ), DIM_TAG_LONG, (DIM_UCHAR *) &stkInfo->metaData.GammaRed); 747 743 748 744 if (pair[0] == DIM_STK_GammaGreen) 749 readTiffBufNoAlloc (tif,pair[1], sizeof( DIM_INT32 ), DIM_TAG_LONG, (DIM_UCHAR *) &stkInfo->metaData.GammaGreen);745 ifd->readBufNoAlloc( pair[1], sizeof( DIM_INT32 ), DIM_TAG_LONG, (DIM_UCHAR *) &stkInfo->metaData.GammaGreen); 750 746 751 747 if (pair[0] == DIM_STK_GammaBlue) 752 readTiffBufNoAlloc (tif,pair[1], sizeof( DIM_INT32 ), DIM_TAG_LONG, (DIM_UCHAR *) &stkInfo->metaData.GammaBlue);748 ifd->readBufNoAlloc( pair[1], sizeof( DIM_INT32 ), DIM_TAG_LONG, (DIM_UCHAR *) &stkInfo->metaData.GammaBlue); 753 749 754 750 DIM_INT32 N = stkInfo->metaData.N; … … 762 758 if (buffer.size() < buf_size) buffer.resize(buf_size); 763 759 DIM_INT32 *buf = (DIM_INT32 *) &buffer[0]; 764 if ( readTiffBufNoAlloc (tif,pair[1], buf_size, DIM_TAG_LONG, (unsigned char *) buf ) == 0) {760 if ( ifd->readBufNoAlloc( pair[1], buf_size, DIM_TAG_LONG, (unsigned char *) buf ) == 0) { 765 761 for (int i=0; i<N; ++i) { 766 762 stkInfo->metaData.StagePositionX[i].num = buf[i*4+0]; … … 776 772 if (buffer.size() < buf_size) buffer.resize(buf_size); 777 773 DIM_INT32 *buf = (DIM_INT32 *) &buffer[0]; 778 if ( readTiffBufNoAlloc (tif,pair[1], buf_size, DIM_TAG_LONG, (unsigned char *) buf ) == 0) {774 if ( ifd->readBufNoAlloc( pair[1], buf_size, DIM_TAG_LONG, (unsigned char *) buf ) == 0) { 779 775 for (int i=0; i<N; ++i) { 780 776 stkInfo->metaData.CameraChipOffsetX[i].num = buf[i*4+0]; … … 788 784 789 785 if (pair[0] == DIM_STK_AbsoluteZ) 790 readTiffBufNoAlloc (tif,pair[1], N*2*sizeof( DIM_INT32 ), DIM_TAG_LONG, (DIM_UCHAR *) stkInfo->metaData.AbsoluteZ);786 ifd->readBufNoAlloc( pair[1], N*2*sizeof( DIM_INT32 ), DIM_TAG_LONG, (DIM_UCHAR *) stkInfo->metaData.AbsoluteZ); 791 787 792 788 if (pair[0] == DIM_STK_AbsoluteZValid) 793 readTiffBufNoAlloc (tif,pair[1], N*sizeof( DIM_INT32 ), DIM_TAG_LONG, (DIM_UCHAR *) stkInfo->metaData.AbsoluteZValid);789 ifd->readBufNoAlloc( pair[1], N*sizeof( DIM_INT32 ), DIM_TAG_LONG, (DIM_UCHAR *) stkInfo->metaData.AbsoluteZValid); 794 790 } 795 791 … … 800 796 if (tiffParams->subType != tstStk) return; 801 797 802 TDimTiffIFD *ifd = &tiffParams->ifds.ifds[0];803 TIFF *tif = tiffParams->dimTiff;804 805 inttag = 33628;806 if ( isTagPresentInFirstIFD( &tiffParams->ifds, tag ) != TRUE) return;798 bim::TinyTiff::IFD *ifd = tiffParams->ifds.firstIfd(); 799 if (!ifd) return; 800 801 uint16 tag = 33628; 802 if (!ifd->tagPresent(tag)) return; 807 803 808 DIM_INT32 i, offset;809 804 DIM_INT32 N = tiffParams->stkInfo.metaData.N; 810 805 DIM_INT32 pair[2]; 811 806 812 offset = getTiffTagOffset(tif, ifd,tag);807 uint64 offset = ifd->tagOffset(tag); 813 808 if (offset == -1) return; 814 DIM_INT32 num_ids = getTiffTagCount(tif, ifd,tag);815 DIM_INT32id_offset = offset;809 uint64 num_ids = ifd->tagCount(tag); 810 uint64 id_offset = offset; 816 811 817 812 // now read and parce ID table 818 for ( i=0; i<num_ids; i++) {819 readTiffBufNoAlloc( tif,id_offset, 2*sizeof( DIM_INT32 ), DIM_TAG_LONG, (DIM_UCHAR *) pair);813 for (uint64 i=0; i<num_ids; i++) { 814 ifd->readBufNoAlloc( id_offset, 2*sizeof( DIM_INT32 ), DIM_TAG_LONG, (DIM_UCHAR *) pair); 820 815 stkParseIDEntry(pair, id_offset, tiffParams); 821 816 id_offset += 2*sizeof( DIM_INT32 ); … … 844 839 if (tiffParams == NULL) return 1; 845 840 if (tiffParams->dimTiff == NULL) return 1; 846 if ( tiffParams->ifds.count <= 0) return 1;841 if (!tiffParams->ifds.isValid()) return 1; 847 842 848 843 tiffParams->stkInfo.allocMetaInfo( stkGetNumPlanes( tiffParams->dimTiff ) ); … … 938 933 dimProgress( fmtHndl, 0, 10, "Reading STK" ); 939 934 940 intread_size = tif->tif_readproc((thandle_t) tif->tif_fd, img->bits[sample], size);935 D_TIFF_SIZE_TYPE read_size = tif->tif_readproc((thandle_t) tif->tif_fd, img->bits[sample], size); 941 936 if (read_size != size) return 1; 942 937 // now swap bytes if needed … … 963 958 if ( dimTestAbort( fmtHndl ) == 1) break; 964 959 965 intread_size = TIFFReadEncodedStrip (tif, strip_offset, (D_TIFF_DATA_TYPE) buf, (D_TIFF_SIZE_TYPE) strip_size);960 D_TIFF_SIZE_TYPE read_size = TIFFReadEncodedStrip (tif, strip_offset, (D_TIFF_DATA_TYPE) buf, (D_TIFF_SIZE_TYPE) strip_size); 966 961 if (read_size == -1) return 1; 967 962 _TIFFmemcpy( ((unsigned char *) img->bits[sample])+strip_offset*strip_size, buf, read_size ); … … 1113 1108 if (!hash) return 1; 1114 1109 DTiffParams *tiffpar = (DTiffParams *) fmtHndl->internalParams; 1115 TDimTiffIFD *ifd = &tiffpar->ifds.ifds[0];1116 1110 TDimStkMetaData *stk = &tiffpar->stkInfo.metaData; 1117 1111 TDimImageInfo *info = &tiffpar->info; 1112 bim::TinyTiff::IFD *ifd = tiffpar->ifds.firstIfd(); 1113 if (!ifd) return 1; 1118 1114 1119 1115 // is this STK? 1120 if (!i sTagPresentInIFD(ifd,33628)) return 0;1116 if (!ifd->tagPresent(33628)) return 0; 1121 1117 1122 1118 xstring name, val; … … 1255 1251 //------------------------------------------------------------ 1256 1252 TIFF *tif = tiffpar->dimTiff; 1257 xstring tag_305 = read_tag_as_string(tif, ifd, TIFFTAG_SOFTWARE ); 1253 xstring tag_305 = ifd->readTagString(TIFFTAG_SOFTWARE); 1254 1258 1255 hash->append_tag( bim::CUSTOM_TAGS_PREFIX+"Software", tag_305 ); 1259 1256 //xstring tag_306 = read_tag_as_string(tif, ifd, TIFFTAG_DATETIME ); 1260 1257 1261 xstring tag_270 = read_tag_as_string(tif, ifd, TIFFTAG_IMAGEDESCRIPTION);1258 xstring tag_270 = ifd->readTagString(TIFFTAG_IMAGEDESCRIPTION); 1262 1259 hash->parse_ini( tag_270, ":", bim::CUSTOM_TAGS_PREFIX ); 1263 1260 -
libsrc/libbioimg/formats/tiff/dim_tiff_format.cpp
r190 r221 31 31 void* DimFree(void *p); 32 32 33 std::string read_tag_as_string(TIFF *tif, TDimTiffIFD *ifd, DIM_UINT tag);34 35 33 #include "dim_tiff_format_io.cpp" 36 34 … … 43 41 this->dimTiff = NULL; 44 42 this->subType = tstGeneric; 45 this->ifds = initTDimTiffIFDs();46 43 } 47 44 … … 428 425 429 426 if (fmtHndl->io_mode != DIM_IO_WRITE) { 430 if (tiffpar != NULL) clearTiffIFDs( &tiffpar->ifds );431 427 clearMetaTags( &fmtHndl->metaData ); 432 428 } … … 486 482 487 483 if (tiffpar->dimTiff != NULL) { 488 tiffpar->ifds = readAllTiffIFDs( tiffpar->dimTiff);484 tiffpar->ifds.read(tiffpar->dimTiff); 489 485 getImageInfo(tiffpar); 490 486 fmtHndl->subFormat = tiffpar->subType; -
libsrc/libbioimg/formats/tiff/dim_tiff_format.h
r190 r221 62 62 #endif 63 63 64 #include " dim_tiny_tiff.h"64 #include "bim_tiny_tiff.h" 65 65 #include "dim_psia_format.h" 66 66 #include "dim_stk_format.h" … … 99 99 TIFF *dimTiff; 100 100 DIM_TiffSubType subType; 101 TDimTiffIFDsifds;101 bim::TinyTiff::Tiff ifds; 102 102 103 103 DStkInfo stkInfo; -
libsrc/libbioimg/formats/tiff/dim_tiff_format_io.cpp
r190 r221 23 23 24 24 #include "memio.h" 25 #include " dim_tiny_tiff.h"25 #include "bim_tiny_tiff.h" 26 26 #include "dim_tiff_format.h" 27 27 … … 40 40 41 41 // must include these guys here if not no access to internal TIFF structs 42 #include "dim_tiny_tiff.cpp"43 42 #include "dim_stk_format_io.cpp" 44 43 #include "dim_psia_format_io.cpp" … … 187 186 //**************************************************************************** 188 187 189 DIM_UINT read_one_tag (TDimFormatHandle *fmtHndl, DTiffParams *tifParams, inttag)188 DIM_UINT read_one_tag (TDimFormatHandle *fmtHndl, DTiffParams *tifParams, uint16 tag) 190 189 { 191 190 if (!areValidParams(fmtHndl, tifParams)) return 1; 192 if (tifParams->ifds.count == 0) return 1; 193 194 if (fmtHndl->pageNumber >= tifParams->ifds.count) fmtHndl->pageNumber = 0; 191 bim::TinyTiff::IFD *ifd = tifParams->ifds.getIfd(fmtHndl->pageNumber); 192 if (!ifd) return 1; 193 194 if (fmtHndl->pageNumber >= tifParams->ifds.count()) fmtHndl->pageNumber = 0; 195 195 TIFF *tif = tifParams->dimTiff; 196 TDimTiffIFDs *ifds = &tifParams->ifds; 197 198 DIM_UCHAR *buf = NULL; 199 uint32 buf_size; 200 uint32 buf_type; 201 202 if ( (tifParams->subType == tstStk) && (tag == 33629) ) // stk 33629 got custom size 6*N 203 { 196 197 DIM_UCHAR *buf=NULL; uint16 buf_type; uint64 buf_size; 198 199 if ( (tifParams->subType == tstStk) && (tag == 33629) ) {// stk 33629 got custom size 6*N 204 200 buf_type = DIM_TAG_LONG; 205 DIM_INT32 count = getTiffTagCount(tif, &ifds->ifds[fmtHndl->pageNumber],tag);206 buf_size = ( count * 6 ) * tag_size_bytes[buf_type];207 readTiffCustomTag (tif, &ifds->ifds[fmtHndl->pageNumber],tag, buf_size, buf_type, (DIM_UCHAR **) &buf);208 } 209 else 210 readTiffTag (tif, &ifds->ifds[fmtHndl->pageNumber],tag, buf_size, buf_type, (DIM_UCHAR **) &buf);211 212 213 214 if ( (buf_size == 0) || (buf == NULL)) return 1;201 uint64 count = ifd->tagCount(tag); 202 buf_size = ( count * 6 ) * bim::TinyTiff::tag_size_bytes[buf_type]; 203 ifd->readTagCustom(tag, buf_size, buf_type, (DIM_UCHAR **) &buf); 204 } 205 else 206 ifd->readTag(tag, buf_size, buf_type, (DIM_UCHAR **) &buf); 207 208 209 210 if (buf_size==0 || !buf) return 1; 215 211 else 216 212 { … … 221 217 item.tagId = tag; 222 218 item.tagType = buf_type; 223 item.tagLength = buf_size / tag_size_bytes[buf_type];219 item.tagLength = buf_size / bim::TinyTiff::tag_size_bytes[buf_type]; 224 220 item.tagData = buf; 225 221 … … 233 229 { 234 230 if (!areValidParams(fmtHndl, tifParams)) return 1; 235 236 231 if (group == DIM_META_BIORAD) return 1; 237 238 if ( fmtHndl->pageNumber >= tifParams->ifds.count) fmtHndl->pageNumber = 0;232 bim::TinyTiff::IFD *ifd = tifParams->ifds.getIfd(fmtHndl->pageNumber); 233 if (!ifd) return 1; 239 234 240 235 // first read custom formatted tags … … 245 240 return read_one_tag ( fmtHndl, tifParams, tag ); 246 241 247 if ( (group == -1) || (group == DIM_META_TIFF_TAG) ) 248 { 249 DIM_UINT i; 250 TDimTiffIFD *ifd = &tifParams->ifds.ifds[fmtHndl->pageNumber]; 251 252 for (i=0; i<ifd->count; i++ ) 253 { 254 if (type == -1) 255 { 256 if ( (ifd->entries[i].tag > 532) && 257 (ifd->entries[i].tag != 50434) 258 259 ) read_one_tag ( fmtHndl, tifParams, ifd->entries[i].tag ); 242 if ( (group == -1) || (group == DIM_META_TIFF_TAG) ) { 243 for (uint64 i=0; i<ifd->size(); i++ ) { 244 bim::TinyTiff::Entry *entry = ifd->getEntry(i); 245 if (type == -1) { 246 if (entry->tag>532 && entry->tag!=50434) 247 read_one_tag ( fmtHndl, tifParams, entry->tag ); 260 248 261 switch( ifd->entries[i].tag )249 switch( entry->tag ) 262 250 { 263 251 case 269: //DocumentName … … 270 258 case 315: //Artist 271 259 case 316: //HostComputer 272 read_one_tag ( fmtHndl, tifParams, ifd->entries[i].tag );260 read_one_tag ( fmtHndl, tifParams, entry->tag ); 273 261 break; 274 262 } // switch … … 276 264 else 277 265 { 278 if ( ifd->entries[i].type == type)279 read_one_tag ( fmtHndl, tifParams, ifd->entries[i].tag );266 if (entry->type == type) 267 read_one_tag ( fmtHndl, tifParams, entry->tag ); 280 268 281 269 } // type != -1 … … 303 291 } 304 292 305 void read_text_tag(TIFF *tif, TDimTiffIFD *ifd, DIM_UINT tag, MemIOBuf *outIOBuf, const char *text) 306 { 307 uint32 buf_size; 308 uint32 buf_type; 309 DIM_UCHAR *buf = NULL; 310 311 if (isTagPresentInIFD ( ifd, tag ) == TRUE ) { 293 void read_text_tag(bim::TinyTiff::IFD *ifd, DIM_UINT tag, MemIOBuf *outIOBuf, const char *text) { 294 if (!ifd->tagPresent(tag)) return; 295 296 uint64 buf_size; 297 uint16 buf_type; 298 DIM_UCHAR *buf = NULL; 312 299 write_title_text(text, outIOBuf); 313 readTiffTag (tif, ifd,tag, buf_size, buf_type, &buf);300 ifd->readTag (tag, buf_size, buf_type, &buf); 314 301 change_0_to_n ((char *) buf, buf_size); 315 302 MemIO_WriteProc( (thandle_t) outIOBuf, buf, buf_size ); 316 freeTiffTagBuf( (DIM_UCHAR **) &buf ); 317 } 318 } 319 320 void read_text_tag(TIFF *tif, TDimTiffIFD *ifd, DIM_UINT tag, MemIOBuf *outIOBuf) 321 { 322 uint32 buf_size; 323 uint32 buf_type; 324 DIM_UCHAR *buf = NULL; 303 _TIFFfree( buf ); 304 } 305 306 void read_text_tag(bim::TinyTiff::IFD *ifd, DIM_UINT tag, MemIOBuf *outIOBuf) { 307 if (!ifd->tagPresent(tag)) return; 308 uint64 buf_size; 309 uint16 buf_type; 310 DIM_UCHAR *buf = NULL; 325 311 326 if (isTagPresentInIFD ( ifd, tag ) == TRUE ) { 327 readTiffTag (tif, ifd, tag, buf_size, buf_type, &buf); 312 ifd->readTag (tag, buf_size, buf_type, &buf); 328 313 change_0_to_n ((char *) buf, buf_size); 329 314 MemIO_WriteProc( (thandle_t) outIOBuf, buf, buf_size ); 330 freeTiffTagBuf( (DIM_UCHAR **) &buf ); 331 } 315 _TIFFfree( buf ); 332 316 } 333 317 334 318 char* read_text_tiff_metadata ( TDimFormatHandle *fmtHndl, DTiffParams *tifParams ) { 335 return NULL;319 return NULL; 336 320 } 337 321 … … 345 329 if (!hash) return 1; 346 330 347 DTiffParams * tifParams= (DTiffParams *) fmtHndl->internalParams;348 TIFF *tif = tifParams->dimTiff;349 TDimTiffIFD *ifd = &tifParams->ifds.ifds[0];331 DTiffParams *par = (DTiffParams *) fmtHndl->internalParams; 332 bim::TinyTiff::IFD *ifd = par->ifds.firstIfd(); 333 if (!ifd) return 1; 350 334 351 335 std::map< int, std::string > hash_tiff_tags; … … 362 346 std::map< int, std::string >::const_iterator it = hash_tiff_tags.begin(); 363 347 while (it != hash_tiff_tags.end()) { 364 xstring tag_str = read_tag_as_string(tif, ifd,it->first);348 xstring tag_str = ifd->readTagString(it->first); 365 349 if (tag_str.size()>0) hash->append_tag( xstring("custom/") + it->second, tag_str ); 366 350 it++; 367 351 } 368 352 return 0; 369 }370 371 std::string read_tag_as_string(TIFF *tif, TDimTiffIFD *ifd, DIM_UINT tag) {372 uint32 buf_size, buf_type;373 DIM_UCHAR *buf = NULL;374 std::string s;375 376 if (isTagPresentInIFD ( ifd, tag ) == TRUE ) {377 readTiffTag (tif, ifd, tag, buf_size, buf_type, &buf);378 s.resize( buf_size );379 memcpy( &s[0], buf, buf_size );380 freeTiffTagBuf( (DIM_UCHAR **) &buf );381 }382 return s;383 353 } 384 354 … … 388 358 if (!hash) return 1; 389 359 390 DTiffParams * tifParams= (DTiffParams *) fmtHndl->internalParams;391 TIFF *tif = tifParams->dimTiff;392 TDimTiffIFD *ifd = &tifParams->ifds.ifds[0];360 DTiffParams *par = (DTiffParams *) fmtHndl->internalParams; 361 bim::TinyTiff::IFD *ifd = par->ifds.firstIfd(); 362 if (!ifd) return 1; 393 363 394 364 /* … … 408 378 // check if it's QImage tiff file 409 379 // should exist private tags 50288 and 50296 410 if (!i sTagPresentInIFD(ifd,50288)) return 0;411 if (!i sTagPresentInIFD(ifd,50296)) return 0;380 if (!ifd->tagPresent(50288)) return 0; 381 if (!ifd->tagPresent(50296)) return 0; 412 382 413 383 // tag 305 should be "QCapture Pro" 414 xstring tag_software = read_tag_as_string(tif, ifd,305);384 xstring tag_software = ifd->readTagString(305); 415 385 if ( tag_software != "QCapture Pro" ) return 0; 416 386 … … 419 389 420 390 421 xstring tag_description = read_tag_as_string(tif, ifd,TIFFTAG_IMAGEDESCRIPTION);391 xstring tag_description = ifd->readTagString(TIFFTAG_IMAGEDESCRIPTION); 422 392 if (tag_description.size()>0) 423 393 hash->parse_ini( tag_description, ":", bim::CUSTOM_TAGS_PREFIX ); 424 394 425 395 // read tag 306 - Date/Time 426 xstring tag_datetime = read_tag_as_string(tif, ifd,306);396 xstring tag_datetime = ifd->readTagString(306); 427 397 if (tag_datetime.size()>0) { 428 398 int y=0, m=0, d=0, h=0, mi=0, s=0, ms=0; -
src/imgcnv.pro
r216 r221 277 277 SOURCES += $$DN_FMTS/dim_format_manager.cpp \ 278 278 $$DN_FMTS/meta_format_manager.cpp\ 279 $$DN_FMTS/tiff/bim_tiny_tiff.cpp \ 279 280 $$DN_FMTS/tiff/dim_tiff_format.cpp \ 280 281 $$DN_FMTS/tiff/dim_xtiff.c \
Note: See TracChangeset
for help on using the changeset viewer.