#include <OSGDATImageFileType.h>

Safe Store/Restore | |
| UInt64 | store (const ImagePtr &image, UChar8 *buffer, Int32 memSize=-1) |
| virtual UInt64 | maxBufferSize (const ImagePtr &image) |
| static UInt64 | restore (ImagePtr &image, const UChar8 *buffer, Int32 memSize=-1) |
| static UInt64 | store (const ImagePtr &image, const char *mimeType, UChar8 *buffer, Int32 memSize=-1) |
Public Types | |
Flags | |
| enum | { OSG_READ_SUPPORTED = 1, OSG_WRITE_SUPPORTED = 2 } |
Public Member Functions | |
Destructor | |
| virtual | ~DATImageFileType (void) |
Read/Write | |
| virtual bool | read (ImagePtr &image, const Char8 *fileName) |
| virtual bool | write (const ImagePtr &image, const Char8 *fileName) |
Buffer | |
| virtual UInt64 | restoreData (ImagePtr &image, const UChar8 *buffer, Int32 memSize=-1) |
| virtual UInt64 | storeData (const ImagePtr &image, UChar8 *buffer, Int32 memSize=-1) |
Set | |
| void | setOptions (const Char8 *options) |
Get Methods | |
| const Char8 * | getMimeType (void) const |
| const std::list< IDString > & | getSuffixList (void) const |
| virtual UInt32 | getFlags (void) const |
| const Char8 * | getOptions (void) |
Read/Write | |
| virtual bool | read (ImagePtr &image, std::istream &is, const std::string &mimetype) |
| virtual bool | write (const ImagePtr &image, std::ostream &os, const std::string &mimetype) |
| virtual bool | validateHeader (const Char8 *fileName, bool &implemented) |
| virtual std::string | determineMimetypeFromStream (std::istream &is) |
dump | |
| void | dump (void) |
Static Public Member Functions | |
Get Methods | |
| static DATImageFileType & | the (void) |
Protected Member Functions | |
Default Constructor | |
| DATImageFileType (const Char8 *mimeType, const Char8 *suffixArray[], UInt16 suffixByteCount) | |
Protected Attributes | |
MTD Header | |
| std::string | _options |
Private Types | |
| enum | KeyType { UNKNOWN_KT = 0, OBJECT_FILE_NAME_KT, RESOLUTION_KT, SLICE_THICKNESS_KT, FORMAT_KT, FILE_OFFSET_KT, CHANNEL_KT, ENDIAN_KT } |
Private Member Functions | |
Copy Constructor | |
| DATImageFileType (const DATImageFileType &obj) | |
Copy Operator | |
| const DATImageFileType & | operator= (const DATImageFileType &obj) |
Static Private Member Functions | |
| static void | initTypeMap (void) |
Static Private Attributes | |
| static DATImageFileType | _the |
| static std::map< std::string, KeyType > | _keyStrMap |
| static std::map< std::string, FormatDesc > | _formatStrMap |
All the type specific code is included in the class. Does not depend on external libs.
Definition at line 55 of file OSGDATImageFileType.h.
enum osg::DATImageFileType::KeyType [private] |
| UNKNOWN_KT | |
| OBJECT_FILE_NAME_KT | |
| RESOLUTION_KT | |
| SLICE_THICKNESS_KT | |
| FORMAT_KT | |
| FILE_OFFSET_KT | |
| CHANNEL_KT | |
| ENDIAN_KT |
Definition at line 126 of file OSGDATImageFileType.h.
00127 { 00128 UNKNOWN_KT = 0, 00129 00130 OBJECT_FILE_NAME_KT, 00131 RESOLUTION_KT, 00132 SLICE_THICKNESS_KT, 00133 FORMAT_KT, 00134 FILE_OFFSET_KT, 00135 CHANNEL_KT, 00136 ENDIAN_KT 00137 };
anonymous enum [inherited] |
Definition at line 66 of file OSGImageFileType.h.
00067 { 00068 OSG_READ_SUPPORTED = 1, 00069 OSG_WRITE_SUPPORTED = 2 00070 };
| DATImageFileType::~DATImageFileType | ( | void | ) | [virtual] |
| DATImageFileType::DATImageFileType | ( | const Char8 * | mimeType, | |
| const Char8 * | suffixArray[], | |||
| UInt16 | suffixByteCount | |||
| ) | [protected] |
Constructor used for the singleton object
Definition at line 561 of file OSGDATImageFileType.cpp.
00564 : ImageFileType ( mimeType, suffixArray, suffixByteCount ) 00565 {}
| osg::DATImageFileType::DATImageFileType | ( | const DATImageFileType & | obj | ) | [private] |
| DATImageFileType & DATImageFileType::the | ( | void | ) | [static] |
Class method to get the singleton Object
Definition at line 104 of file OSGDATImageFileType.cpp.
References _the.
00105 { 00106 return _the; 00107 }
Tries to fill the image object with the data read from the given fileName. Returns true on success.
Reimplemented from osg::ImageFileType.
Definition at line 118 of file OSGDATImageFileType.cpp.
References _formatStrMap, _keyStrMap, osg::beginEditCP(), CHANNEL_KT, osg::endEditCP(), ENDIAN_KT, FILE_OFFSET_KT, osg::PathHandler::findFile(), FINFO, FLOG, FNOTICE, FORMAT_KT, FWARNING, osg::ImageFileHandler::getPathHandler(), initTypeMap(), osg::isGZip(), OBJECT_FILE_NAME_KT, osg::Image::OSG_FLOAT32_IMAGEDATA, osg::Image::OSG_INVALID_IMAGEDATATYPE, osg::Image::OSG_L_PF, osg::Image::OSG_LA_PF, osg::Image::OSG_RGB_PF, osg::Image::OSG_RGBA_PF, osg::Image::OSG_UINT16_IMAGEDATA, osg::Image::OSG_UINT32_IMAGEDATA, osg::Image::OSG_UINT8_IMAGEDATA, RESOLUTION_KT, SFATAL, SLICE_THICKNESS_KT, osg::ImageFileHandler::the(), and UNKNOWN_KT.
00120 { 00121 bool retCode = false; 00122 00123 std::ifstream inDat(fileName), inVolS; 00124 std::istream *inVol; 00125 std::string keyStr, objectFileName; 00126 const UInt32 lineBufferSize = 1024; 00127 Char8 *value, *keySepPos, lineBuffer[lineBufferSize]; 00128 const Char8 keySep = ':'; 00129 int fileOffset, keyL, valueL; 00130 std::map<std::string, KeyType>::iterator keyI; 00131 std::map<std::string, FormatDesc>::iterator formatI; 00132 KeyType key; 00133 Image::Type formatType; 00134 UInt32 channel = 1; 00135 UInt32 res[3]; 00136 UInt32 dataSize = 0; 00137 Image::PixelFormat pixelFormat; 00138 char *dataBuffer = 0; 00139 bool needConversion = false; 00140 // default endian type is big endian 00141 bool big_endian = true; 00142 00143 res[0] = res[1] = res[2] = 0; 00144 fileOffset = 0; 00145 formatType = Image::OSG_INVALID_IMAGEDATATYPE; 00146 dataSize = 0; 00147 dataBuffer = 0; 00148 00149 initTypeMap(); 00150 00151 beginEditCP(image); 00152 00153 // read the data file 00154 for ( lineBuffer[0] = 0; 00155 inDat.getline ( lineBuffer, lineBufferSize); 00156 lineBuffer[0] = 0 ) 00157 { 00158 if ((keySepPos = strchr(lineBuffer,keySep))) 00159 { 00160 keyL = keySepPos - lineBuffer; 00161 keyStr.assign( lineBuffer, keyL ); 00162 keyI = _keyStrMap.find(keyStr); 00163 key = ((keyI == _keyStrMap.end()) ? UNKNOWN_KT : keyI->second); 00164 value = keySepPos + 1; 00165 while (value && isspace(*value)) 00166 value++; 00167 valueL = strlen(value); 00168 while (isspace(value[valueL-1])) 00169 value[--valueL] = 0; 00170 switch (key) 00171 { 00172 case OBJECT_FILE_NAME_KT: 00173 objectFileName = value; 00174 image->setAttachmentField ( keyStr, value ); 00175 break; 00176 case CHANNEL_KT: 00177 sscanf ( value, "%d", &(channel) ); 00178 image->setAttachmentField ( keyStr, value ); 00179 break; 00180 case RESOLUTION_KT: 00181 sscanf ( value, "%d %d %d", 00182 &(res[0]), &(res[1]), &(res[2])); 00183 image->setAttachmentField ( keyStr, value ); 00184 break; 00185 case FORMAT_KT: 00186 formatI = _formatStrMap.find(value); 00187 if (formatI != _formatStrMap.end()) 00188 { 00189 formatType = formatI->second.type; 00190 } 00191 else 00192 { 00193 formatType = Image::OSG_INVALID_IMAGEDATATYPE; 00194 } 00195 image->setAttachmentField ( keyStr, value ); 00196 break; 00197 case ENDIAN_KT: 00198 if(!strcmp(value, "LITTLE")) 00199 big_endian = false; 00200 image->setAttachmentField ( keyStr, value ); 00201 break; 00202 case FILE_OFFSET_KT: 00203 sscanf ( value, "%d", &fileOffset ); 00204 image->setAttachmentField ( keyStr, value ); 00205 break; 00206 case UNKNOWN_KT: 00207 FNOTICE (( "Uknown DAT file key: >%s<\n", 00208 keyStr.c_str() )); 00209 image->setAttachmentField ( keyStr, value ); 00210 break; 00211 case SLICE_THICKNESS_KT: 00212 default: 00213 image->setAttachmentField ( keyStr, value ); 00214 break; 00215 } 00216 } 00217 else 00218 { 00219 FINFO (("Skip DAT line\n")); 00220 } 00221 } 00222 00223 // set pixelformat 00224 switch (channel) { 00225 case 4: 00226 pixelFormat = osg::Image::OSG_RGBA_PF; 00227 break; 00228 case 3: 00229 pixelFormat = osg::Image::OSG_RGB_PF; 00230 break; 00231 case 2: 00232 pixelFormat = osg::Image::OSG_LA_PF; 00233 break; 00234 default: 00235 pixelFormat = osg::Image::OSG_L_PF; 00236 break; 00237 } 00238 00239 // check the setting and read the raw vol data 00240 if (objectFileName.empty() == false) 00241 { 00242 if ( (res[0] > 0) && (res[1] > 0) && (res[2] > 0) ) 00243 { 00244 if (formatType != Image::OSG_INVALID_IMAGEDATATYPE) 00245 { 00246 inVolS.open(objectFileName.c_str(), 00247 std::ios::in | std::ios::binary ); 00248 if (inVolS.fail() && ImageFileHandler::the().getPathHandler()) 00249 { 00250 // Try to find the file in the search path 00251 inVolS.clear(); // reset the error state 00252 PathHandler * ph = ImageFileHandler::the().getPathHandler(); 00253 inVolS.open(ph->findFile(objectFileName.c_str()).c_str(), 00254 std::ios::in | std::ios::binary ); 00255 } 00256 if (inVolS.fail()) 00257 { 00258 // Maybe compressed and name not changed? 00259 std::string gzname = objectFileName + ".gz"; 00260 inVolS.clear(); // reset the error state 00261 inVolS.open(gzname.c_str(), 00262 std::ios::in | std::ios::binary ); 00263 if (inVolS.fail() && 00264 ImageFileHandler::the().getPathHandler()) 00265 { 00266 // Try to find the file in the search path 00267 inVolS.clear(); // reset the error state 00268 PathHandler * ph = ImageFileHandler::the().getPathHandler(); 00269 inVolS.open(ph->findFile(gzname.c_str()).c_str(), 00270 std::ios::in | std::ios::binary ); 00271 } 00272 } 00273 if (inVolS.good()) 00274 { 00275 #ifdef OSG_ZSTREAM_SUPPORTED 00276 zip_istream *unzipper = NULL; 00277 #endif 00278 00279 image->set ( pixelFormat, res[0], res[1], res[2], 1, 1, 0.0, 0, formatType); 00280 image->clear(); 00281 00282 dataSize = image->getSize(); 00283 00284 UInt32 fileDataSize = dataSize; 00285 00286 if(isGZip(inVolS)) 00287 { 00288 #ifdef OSG_ZSTREAM_SUPPORTED 00289 unzipper = new zip_istream(inVolS); 00290 inVol = unzipper; 00291 #else 00292 SFATAL << "Compressed streams are not supported! Configure with --enable-png --with-png=DIR options." << std::endl; 00293 #endif 00294 } 00295 else 00296 { 00297 inVol = &inVolS; 00298 00299 // get length of the stream. 00300 inVol->seekg(0, std::ios::end); 00301 UInt64 length = inVol->tellg(); 00302 inVol->seekg(0, std::ios::beg); 00303 00304 if(length < dataSize - fileOffset) 00305 { 00306 // correct dataSize. 00307 fileDataSize = length; 00308 FWARNING (( "RAW file length to small!\n" )); 00309 } 00310 else if(length > dataSize - fileOffset) 00311 { 00312 FWARNING (( "RAW file length to big!\n" )); 00313 } 00314 } 00315 00316 if (needConversion) 00317 dataBuffer = new char [ dataSize ]; 00318 else 00319 dataBuffer = ((char *)(image->getData())); 00320 00321 if(fileOffset != 0) 00322 inVol->ignore ( fileOffset ); 00323 inVol->read ( dataBuffer, fileDataSize ); 00324 00325 #ifdef OSG_ZSTREAM_SUPPORTED 00326 if(unzipper != NULL) 00327 delete unzipper; 00328 #endif 00329 } 00330 else 00331 { 00332 FWARNING (( "Can not open %s image data\n", 00333 objectFileName.c_str() )); 00334 } 00335 } 00336 else 00337 { 00338 FWARNING (( "Invalid/Missing DAT Format\n" )); 00339 } 00340 } 00341 else 00342 { 00343 FWARNING (( "Invalid/Missing DAT Resolution\n" )); 00344 } 00345 } 00346 else 00347 { 00348 FWARNING (( "Invalid/Missing DAT ObjectFileName\n" )); 00349 } 00350 00351 // check/reformat vol data 00352 if (dataSize && dataBuffer) 00353 { 00354 // check host endian type 00355 UInt16 word = 0x0001; 00356 UInt8 *byte = (UInt8 *) &word; 00357 bool host_big_endian = byte[0] ? false : true; 00358 00359 if(big_endian != host_big_endian) 00360 image->swapDataEndian(); 00361 00362 if (needConversion) 00363 { 00364 FLOG (("DAT-Data convert not impl. yet !\n")); 00365 { 00366 switch (formatType) 00367 { 00368 case Image::OSG_UINT8_IMAGEDATA: 00369 break; 00370 case Image::OSG_UINT16_IMAGEDATA: 00371 break; 00372 case Image::OSG_UINT32_IMAGEDATA: 00373 break; 00374 case Image::OSG_FLOAT32_IMAGEDATA: 00375 break; 00376 default: 00377 ; 00378 } 00379 } 00380 } 00381 else 00382 { 00383 retCode = true; 00384 } 00385 } 00386 00387 00388 /* TODO 00389 std::ifstream in(fileName); 00390 Head head; 00391 void *headData = (void*)(&head); 00392 unsigned dataSize, headSize = sizeof(Head); 00393 00394 if ( in && 00395 in.read(static_cast<char *>(headData), 00396 headSize) && head.netToHost() && 00397 image.set ( Image::PixelFormat(head.pixelFormat), 00398 head.width, head.height, head.depth, head.mipmapCount, 00399 head.frameCount, float(head.frameDelay) / 1000.0) && 00400 (dataSize = image.getSize()) && 00401 in.read((char *)(image.getData()), dataSize )) 00402 retCode = true; 00403 else 00404 retCode = false; 00405 */ 00406 00407 endEditCP(image); 00408 00409 return retCode; 00410 }
Tries to write the image object to the given fileName. Returns true on success.
Reimplemented from osg::ImageFileType.
Definition at line 417 of file OSGDATImageFileType.cpp.
References _formatStrMap, initTypeMap(), and SWARNING.
00419 { 00420 initTypeMap(); 00421 00422 // ok we write always in big endian. 00423 #if BYTE_ORDER == LITTLE_ENDIAN 00424 image->swapDataEndian(); 00425 #endif 00426 00427 std::ofstream dat(fileName, std::ios::binary); 00428 if(!dat) 00429 { 00430 SWARNING << "DATImageFileType::write : Can not open output stream for file '" << fileName << "'!" << std::endl; 00431 return false; 00432 } 00433 00434 Real64 sT[3]; 00435 sT[0] = sT[1] = sT[2] = 1.0; 00436 const std::string *attr = image->findAttachmentField("SliceThickness"); 00437 if(attr != NULL) 00438 sscanf(attr->c_str(), "%lf %lf %lf", &sT[0], &sT[1], &sT[2]); 00439 00440 std::string format = "UCHAR"; 00441 for(std::map<std::string, FormatDesc>::iterator it = _formatStrMap.begin(); 00442 it != _formatStrMap.end();++it) 00443 { 00444 if((*it).second.type == image->getDataType()) 00445 { 00446 format = (*it).first; 00447 break; 00448 } 00449 } 00450 00451 std::string basename = fileName; 00452 std::string::size_type i = basename.rfind("."); 00453 if(i != std::string::npos) 00454 basename = basename.substr(0, i); 00455 basename += ".raw"; 00456 00457 std::string name = basename; 00458 i = name.rfind("/"); 00459 // on windows also a / is possible! 00460 #if defined(WIN32) 00461 if(i == std::string::npos) 00462 i = name.rfind("\\"); 00463 #endif 00464 if(i != std::string::npos) 00465 name = name.substr(i+1); 00466 00467 dat << "ObjectFileName: " << name << "\n"; 00468 dat << "TaggedFileName: ---\n"; 00469 dat << "Resolution: " << image->getWidth() << " " << image->getHeight() 00470 << " " << image->getDepth() << "\n"; 00471 dat << "SliceThickness: " << sT[0] << " " << sT[1] << " " << sT[2] << "\n"; 00472 dat << "Format: " << format << "\n"; 00473 dat << "NbrTags: 0\n"; 00474 dat << "ObjectType: TEXTURE_VOLUME_OBJECT\n"; 00475 dat << "ObjectModel: DENSITY\n"; 00476 dat << "GridType: EQUIDISTANT\n"; 00477 00478 if (image->getBpp() > 1) 00479 dat << "Channel: " << image->getBpp() << "\n"; 00480 00481 dat.close(); 00482 00483 std::ofstream raw(basename.c_str(), std::ios::binary); 00484 if(!raw) 00485 { 00486 SWARNING << "DATImageFileType::write : Can not open output stream for file '" << basename << "'!" << std::endl; 00487 return false; 00488 } 00489 00490 raw.write ((const char *) image->getData(), image->getSize()); 00491 raw.close(); 00492 00493 // restore to original endian 00494 #if BYTE_ORDER == LITTLE_ENDIAN 00495 image->swapDataEndian(); 00496 #endif 00497 00498 /* 00499 ofstream out(fileName); 00500 Head head; 00501 const void *headData = (void*)(&head); 00502 unsigned dataSize = image.getSize(), headSize = sizeof(Head); 00503 00504 head.pixelFormat = image.getPixelFormat(); 00505 head.width = image.getWidth(); 00506 head.height = image.getHeight(); 00507 head.depth = image.getDepth(); 00508 head.mipmapCount = image.getMipMapCount(); 00509 head.frameCount = image.getFrameCount(); 00510 head.frameDelay = short(image.getFrameDelay() * 1000.0); 00511 head.hostToNet(); 00512 00513 if ( out && out.write(static_cast<const char *>(headData), headSize) && 00514 dataSize && 00515 out.write((char *)(image.getData()), dataSize) ) 00516 retCode = true; 00517 else 00518 retCode = false; 00519 */ 00520 00521 return true; 00522 }
| UInt64 DATImageFileType::restoreData | ( | ImagePtr & | image, | |
| const UChar8 * | buffer, | |||
| Int32 | memSize = -1 | |||
| ) | [virtual] |
Tries to restore the image data from the given memblock. Returns the amount of data read.
Reimplemented from osg::ImageFileType.
Definition at line 529 of file OSGDATImageFileType.cpp.
| UInt64 DATImageFileType::storeData | ( | const ImagePtr & | image, | |
| UChar8 * | buffer, | |||
| Int32 | memSize = -1 | |||
| ) | [virtual] |
Tries to store the image data to the given memblock. Returns the amount of data written.
Reimplemented from osg::ImageFileType.
Definition at line 543 of file OSGDATImageFileType.cpp.
00546 { 00547 UInt32 dataSize = image->getSize(); 00548 const UChar8 *src = image->getData(); 00549 00550 if ( dataSize && src && buffer ) 00551 memcpy( buffer, src, dataSize); 00552 00553 return dataSize; 00554 }
| const DATImageFileType& osg::DATImageFileType::operator= | ( | const DATImageFileType & | obj | ) | [private] |
| void DATImageFileType::initTypeMap | ( | void | ) | [static, private] |
Helper to initialize the type map;
Definition at line 577 of file OSGDATImageFileType.cpp.
References _formatStrMap, _keyStrMap, CHANNEL_KT, ENDIAN_KT, FILE_OFFSET_KT, FORMAT_KT, OBJECT_FILE_NAME_KT, osg::Image::OSG_FLOAT32_IMAGEDATA, osg::Image::OSG_L_PF, osg::Image::OSG_UINT16_IMAGEDATA, osg::Image::OSG_UINT32_IMAGEDATA, osg::Image::OSG_UINT8_IMAGEDATA, RESOLUTION_KT, and SLICE_THICKNESS_KT.
Referenced by read(), and write().
00578 { 00579 FormatDesc *desc; 00580 00581 if (_keyStrMap.empty()) 00582 { 00583 _keyStrMap["ObjectFileName"] = OBJECT_FILE_NAME_KT; 00584 _keyStrMap["Resolution"] = RESOLUTION_KT; 00585 _keyStrMap["Channel"] = CHANNEL_KT; 00586 _keyStrMap["SliceThickness"] = SLICE_THICKNESS_KT; 00587 _keyStrMap["Format"] = FORMAT_KT; 00588 _keyStrMap["Endian"] = ENDIAN_KT; 00589 _keyStrMap["FileOffset"] = FILE_OFFSET_KT; 00590 } 00591 00592 if (_formatStrMap.empty()) 00593 { 00594 desc = &(_formatStrMap["UCHAR"]); 00595 desc->type = Image::OSG_UINT8_IMAGEDATA; 00596 desc->bpv = 1; 00597 desc->pixelFormat = Image::OSG_L_PF; 00598 desc->needConversion = false; 00599 00600 desc = &(_formatStrMap["USHORT"]); 00601 desc->type = Image::OSG_UINT16_IMAGEDATA; 00602 desc->bpv = 2; 00603 desc->pixelFormat = Image::OSG_L_PF; 00604 desc->needConversion = false; 00605 00606 desc = &(_formatStrMap["UINT"]); 00607 desc->type = Image::OSG_UINT32_IMAGEDATA; 00608 desc->bpv = 4; // TODO; is this right ? 00609 desc->pixelFormat = Image::OSG_L_PF; 00610 desc->needConversion = false; 00611 00612 desc = &(_formatStrMap["ULONG"]); 00613 desc->type = Image::OSG_UINT32_IMAGEDATA; 00614 desc->bpv = 4; 00615 desc->pixelFormat = Image::OSG_L_PF; 00616 desc->needConversion = false; 00617 00618 desc = &(_formatStrMap["FLOAT"]); 00619 desc->type = Image::OSG_FLOAT32_IMAGEDATA; 00620 desc->bpv = 4; 00621 desc->pixelFormat = Image::OSG_L_PF; 00622 desc->needConversion = false; 00623 00624 desc = &(_formatStrMap["DOUBLE"]); 00625 desc->type = Image::OSG_FLOAT32_IMAGEDATA; // we have no OSG_FLOAT64_IMAGEDATA 00626 desc->bpv = 8; 00627 desc->pixelFormat = Image::OSG_L_PF; 00628 desc->needConversion = false; 00629 } 00630 00631 }
| void ImageFileType::setOptions | ( | const Char8 * | options | ) | [inherited] |
Definition at line 243 of file OSGImageFileType.cpp.
References osg::ImageFileType::_options.
Referenced by osg::ImageFileHandler::setOptions().
00244 { 00245 _options = options; 00246 }
| const Char8 * ImageFileType::getMimeType | ( | void | ) | const [inherited] |
Get method for the mime type
Definition at line 107 of file OSGImageFileType.cpp.
References osg::ImageFileType::_mimeType, and osg::IDString::str().
Referenced by osg::ImageFileHandler::addImageFileType(), osg::TIFImageFileType::determineMimetypeFromStream(), osg::SGIImageFileType::determineMimetypeFromStream(), osg::PSDImageFileType::determineMimetypeFromStream(), osg::PNMImageFileType::determineMimetypeFromStream(), osg::PNGImageFileType::determineMimetypeFromStream(), osg::MNGImageFileType::determineMimetypeFromStream(), osg::JPGImageFileType::determineMimetypeFromStream(), osg::JP2ImageFileType::determineMimetypeFromStream(), osg::GIFImageFileType::determineMimetypeFromStream(), osg::DDSImageFileType::determineMimetypeFromStream(), osg::BMPImageFileType::determineMimetypeFromStream(), osg::ImageFileType::dump(), osg::TIFImageFileType::read(), osg::PNGImageFileType::read(), osg::JPGImageFileType::read(), osg::JP2ImageFileType::read(), osg::ImageFileType::read(), osg::ImageFileHandler::read(), osg::EXRImageFileType::read(), osg::PNGImageFileType::restoreData(), osg::JPGImageFileType::restoreData(), osg::ImageFileType::restoreData(), osg::ImageFileHandler::store(), osg::PNGImageFileType::storeData(), osg::JPGImageFileType::storeData(), osg::ImageFileType::storeData(), osg::TIFImageFileType::write(), osg::PNGImageFileType::write(), osg::JPGImageFileType::write(), osg::ImageFileType::write(), osg::ImageFileHandler::write(), and osg::EXRImageFileType::write().
| const std::list< IDString > & ImageFileType::getSuffixList | ( | void | ) | const [inherited] |
Get method for the suffix list container
Definition at line 134 of file OSGImageFileType.cpp.
References osg::ImageFileType::_suffixList.
Referenced by osg::ImageFileHandler::addImageFileType().
00135 { 00136 return _suffixList; 00137 }
| UInt32 ImageFileType::getFlags | ( | void | ) | const [virtual, inherited] |
Get method for the flags indicating read/write support. Most image types only support reading.
Definition at line 117 of file OSGImageFileType.cpp.
References osg::ImageFileType::_flags.
Referenced by osg::ImageFileHandler::getSuffixList().
00118 { 00119 return _flags; 00120 }
| const Char8 * ImageFileType::getOptions | ( | void | ) | [inherited] |
Get method for the mime type
Definition at line 124 of file OSGImageFileType.cpp.
References osg::ImageFileType::_options.
Referenced by osg::ImageFileHandler::getOptions().
00125 { 00126 return _options.c_str(); 00127 }
| bool ImageFileType::read | ( | ImagePtr & | image, | |
| std::istream & | is, | |||
| const std::string & | mimetype | |||
| ) | [virtual, inherited] |
Tries to fill the image object with the data read from the given input stream. Returns true on success.
Reimplemented in osg::BMPImageFileType, osg::DDSImageFileType, osg::EXRImageFileType, osg::GIFImageFileType, osg::HDRImageFileType, osg::JP2ImageFileType, osg::JPGImageFileType, osg::MTDImageFileType, osg::NRRDImageFileType, osg::PNGImageFileType, osg::PNMImageFileType, osg::PSDImageFileType, osg::SGIImageFileType, osg::TGAImageFileType, and osg::TIFImageFileType.
Definition at line 172 of file OSGImageFileType.cpp.
References osg::endLog(), osg::ImageFileType::getMimeType(), and SWARNING.
00173 { 00174 SWARNING << getMimeType() 00175 << " read from stream is not implemented" 00176 << endLog; 00177 return false; 00178 }
| bool ImageFileType::write | ( | const ImagePtr & | image, | |
| std::ostream & | os, | |||
| const std::string & | mimetype | |||
| ) | [virtual, inherited] |
Tries to write the image object to the given output stream. Returns true on success.
Reimplemented in osg::BMPImageFileType, osg::EXRImageFileType, osg::HDRImageFileType, osg::JPGImageFileType, osg::MTDImageFileType, osg::PNGImageFileType, osg::PNMImageFileType, and osg::TIFImageFileType.
Definition at line 185 of file OSGImageFileType.cpp.
References osg::endLog(), osg::ImageFileType::getMimeType(), and SWARNING.
00186 { 00187 SWARNING << getMimeType() 00188 << " write to stream is not implemented" 00189 << endLog; 00190 return false; 00191 }
| bool ImageFileType::validateHeader | ( | const Char8 * | fileName, | |
| bool & | implemented | |||
| ) | [virtual, inherited] |
Reimplemented in osg::GIFImageFileType, osg::JPGImageFileType, osg::PNGImageFileType, osg::SGIImageFileType, and osg::TIFImageFileType.
Definition at line 161 of file OSGImageFileType.cpp.
Referenced by osg::ImageFileHandler::getFileType().
| std::string ImageFileType::determineMimetypeFromStream | ( | std::istream & | is | ) | [virtual, inherited] |
Tries to determine the mime type of the data provided by an input stream by searching for magic bytes. Returns the mime type or an empty string when the function could not determine the mime type.
Reimplemented in osg::BMPImageFileType, osg::DDSImageFileType, osg::GIFImageFileType, osg::JP2ImageFileType, osg::JPGImageFileType, osg::MNGImageFileType, osg::PNGImageFileType, osg::PNMImageFileType, osg::PSDImageFileType, osg::SGIImageFileType, and osg::TIFImageFileType.
Definition at line 199 of file OSGImageFileType.cpp.
| UInt64 ImageFileType::restore | ( | ImagePtr & | image, | |
| const UChar8 * | buffer, | |||
| Int32 | memSize = -1 | |||
| ) | [static, inherited] |
Tries to restore the Imagedata from the given memblock. The buffer must include a ImageFileType::Head data block.
Definition at line 283 of file OSGImageFileType.cpp.
References osg::ImageFileType::Head::dataType, osg::ImageFileType::Head::depth, osg::ImageFileHandler::determineMimetypeFromSuffix(), FDEBUG, osg::ImageFileType::Head::frameCount, osg::ImageFileType::Head::frameDelay, FWARNING, osg::ImageFileType::Head::height, osg::ImageFileType::Head::mipmapCount, osg::ImageFileType::Head::netToHost(), osg::NullFC, osg::Image::OSG_UINT8_IMAGEDATA, osg::ImageFileType::Head::pixelFormat, osg::ImageFileType::Head::sideCount, osg::ImageFileType::Head::suffix, osg::ImageFileHandler::the(), and osg::ImageFileType::Head::width.
Referenced by osg::ClusterViewBuffer::recv(), osg::ImageFileHandler::restore(), and osg::SimpleSceneManager::useOpenSGLogo().
00285 { 00286 unsigned long imageSize, headSize = sizeof(Head); 00287 unsigned long size = 0, attachmentSize; 00288 Head head; 00289 const UChar8 *data = buffer ? (buffer + headSize) : 0; 00290 ImageFileType *type; 00291 std::string mimeType; 00292 Image::Type dataType; 00293 00294 if ((image != osg::NullFC) && buffer && (memSize >= headSize)) { 00295 00296 // Copy header. Otherwise netToHost would change the original 00297 // data structur. 00298 memcpy(&head,buffer,sizeof(Head)); 00299 head.netToHost(); 00300 mimeType = ImageFileHandler::the().determineMimetypeFromSuffix(head.suffix); 00301 00302 if((type = ImageFileHandler::the().getFileType(mimeType.c_str(), 0))) 00303 { 00304 if (head.dataType) 00305 dataType = Image::Type(head.dataType); 00306 else 00307 dataType = Image::OSG_UINT8_IMAGEDATA; 00308 00309 image->set(Image::PixelFormat(head.pixelFormat), head.width, 00310 head.height, head.depth, head.mipmapCount, 00311 head.frameCount, float(head.frameDelay) / 1000.0, 0, 00312 dataType,true,head.sideCount ); 00313 imageSize = static_cast<unsigned long>( 00314 type->restoreData(image, data, memSize - headSize)); 00315 attachmentSize = 0; // head->attachmentSize; 00316 00317 /* 00318 if ((attachmentSize = head->attachmentSize)) 00319 { 00320 attData = (char*)(buffer + headSize + imageSize); 00321 attKey = attData; 00322 attValue = 0; 00323 for (i = 0; i < (attachmentSize-1); i++) { 00324 if (attData[i] == 0) 00325 if (attKey) { 00326 attValue = &(attData[i+1]); 00327 image->setAttachmentField (attKey,attValue); 00328 attKey = attValue = 0; 00329 } 00330 else 00331 attKey = &(attData[i+1]); 00332 } 00333 if (attKey || attValue) { 00334 FFATAL (("Attachment restore error\n")); 00335 } 00336 } 00337 */ 00338 00339 size = headSize + imageSize + attachmentSize; 00340 00341 FDEBUG (( "Restore image data: %lu (%lu/%lu/%lu)\n", 00342 size, headSize, imageSize, attachmentSize )); 00343 00344 } 00345 else 00346 { 00347 imageSize = 0; 00348 FWARNING(("Can not restore image data, invalid mimeType: %s\n", 00349 mimeType.empty() == false ? mimeType.c_str() : "Unknown")); 00350 } 00351 00352 00353 } 00354 00355 return size; 00356 }
| UInt64 ImageFileType::store | ( | const ImagePtr & | image, | |
| const char * | mimeType, | |||
| UChar8 * | buffer, | |||
| Int32 | memSize = -1 | |||
| ) | [static, inherited] |
Tries to store the raster data to the given mem block. Will include a ImageFileType::Head description and the data encoded as 'mimeType'
Definition at line 364 of file OSGImageFileType.cpp.
References osg::ImageFileHandler::getFileType(), osg::ImageFileType::store(), and osg::ImageFileHandler::the().
Referenced by osg::ClusterViewBuffer::send(), osg::ImageFileType::store(), and osg::ImageFileHandler::store().
00366 { 00367 ImageFileType *type = ImageFileHandler::the().getFileType(mimeType); 00368 00369 return type ? type->store(image, buffer, memSize) : 0; 00370 }
| UInt64 ImageFileType::store | ( | const ImagePtr & | image, | |
| UChar8 * | buffer, | |||
| Int32 | memSize = -1 | |||
| ) | [inherited] |
Tries to store the raster data to the given mem block. Will include a ImageFileType::Head description for the derived concreate mimeType.
Definition at line 378 of file OSGImageFileType.cpp.
References osg::ImageFileType::_suffixList, osg::ImageFileType::Head::attachmentSize, osg::ImageFileType::Head::dataType, osg::ImageFileType::Head::depth, FDEBUG, FFATAL, osg::ImageFileType::Head::frameCount, osg::ImageFileType::Head::frameDelay, osg::ImageFileType::Head::height, osg::ImageFileType::Head::hostToNet(), osg::ImageFileType::Head::mipmapCount, osg::ImageFileType::Head::pixelFormat, osg::ImageFileType::Head::sideCount, osg::ImageFileType::storeData(), osg::ImageFileType::Head::suffix, and osg::ImageFileType::Head::width.
00380 { 00381 Head *head; 00382 unsigned long dataSize = 0, headSize = sizeof(Head); 00383 unsigned long attachmentSize; 00384 UChar8 *dest; 00385 const UChar8 *src = image->getData(); 00386 std::map<std::string, std::string>::const_iterator aI; 00387 std::string value; 00388 00389 attachmentSize = 0; 00390 00391 // get attachment size 00392 /* 00393 ImageGenericAttPtr att=ImageGenericAttPtr::dcast( 00394 const_cast<Image*>(image.getCPtr())->findAttachment( 00395 ImageGenericAtt::getClassType().getGroupId())); 00396 if(att != NullFC) 00397 { 00398 for(i = 0; i < (att->getType().getNumFieldDescs()-1); ++i) 00399 { 00400 FieldDescription *fieldDesc=att->getType().getFieldDescription(i); 00401 Field *field=att->getField(i); 00402 if (fieldDesc && field) 00403 { 00404 field->getValueByStr(value); 00405 attachmentSize += strlen( fieldDesc->getName().str() ) + 1; 00406 attachmentSize += value.length() + 1; 00407 00408 std::cout << fieldDesc->getName().str() << std::endl; 00409 std::cout << value << std::endl; 00410 } 00411 else 00412 { 00413 FFATAL (("Invalid Attachment in ImageFileType::store()\n")); 00414 } 00415 } 00416 } 00417 */ 00418 00419 if (buffer) 00420 { 00421 head = (Head *)buffer; 00422 00423 head->pixelFormat = image->getPixelFormat(); 00424 head->width = image->getWidth(); 00425 head->height = image->getHeight(); 00426 head->depth = image->getDepth(); 00427 head->mipmapCount = image->getMipMapCount(); 00428 head->frameCount = image->getFrameCount(); 00429 head->frameDelay = short(image->getFrameDelay() * 1000.0); 00430 head->sideCount = image->getSideCount(); 00431 head->dataType = image->getDataType(); 00432 head->attachmentSize = static_cast<unsigned short>(attachmentSize); 00433 head->hostToNet(); 00434 00435 strcpy(head->suffix, _suffixList.front().str()); 00436 00437 dest = (UChar8 *) (buffer + headSize); 00438 00439 if (src) 00440 dataSize = static_cast<unsigned long>( 00441 storeData(image, dest, memSize - headSize)); 00442 00443 dest = (UChar8 *) (buffer + headSize + dataSize); 00444 00445 /* 00446 if(att != NullFC) 00447 { 00448 for(i = 0; i < (att->getType().getNumFieldDescs()-1); ++i) 00449 { 00450 FieldDescription *fieldDesc=att->getType().getFieldDescription(i); 00451 Field *field=att->getField(i); 00452 if (field && fieldDesc) 00453 { 00454 field->getValueByStr(value); 00455 00456 l = strlen( fieldDesc->getName().str() ); 00457 for (i = 0; i < l; i++) 00458 *dest++ = fieldDesc->getName().str()[i]; 00459 *dest++ = 0; 00460 l = value.length(); 00461 for (i = 0; i < l; i++) 00462 *dest++ = value[i]; 00463 *dest++ = 0; 00464 } 00465 else 00466 { 00467 FFATAL (("Invalid Attachment in ImageFileType::store()\n")); 00468 } 00469 } 00470 } 00471 */ 00472 00473 FDEBUG (( "Store image data: %lu (%lu/%lu/%lu)\n", 00474 headSize + dataSize + attachmentSize, headSize, dataSize, 00475 attachmentSize )); 00476 } 00477 else { 00478 FFATAL (("Invalid buffer in ImageFileType::store()\n")); 00479 } 00480 00481 return (headSize + dataSize + attachmentSize); 00482 00483 }
Returns the max buffer size needed to store the Image (Head + mimeType specific data block)
Definition at line 490 of file OSGImageFileType.cpp.
References FINFO.
Referenced by osg::ClusterViewBuffer::send(), and osg::ImageFileHandler::store().
00491 { 00492 std::string value; 00493 unsigned long size, attachmentSize; 00494 unsigned long imageSize = image->getSize(), headSize = sizeof(Head); 00495 00496 std::map<std::string, std::string>::const_iterator aI; 00497 00498 attachmentSize = 0; 00499 00500 // get attachment size 00501 /* 00502 ImageGenericAttPtr att=ImageGenericAttPtr::dcast( 00503 const_cast<Image*>(image.getCPtr())->findAttachment( 00504 ImageGenericAtt::getClassType().getGroupId())); 00505 if(att != NullFC) 00506 { 00507 for(i = 0; i < (att->getType().getNumFieldDescs()-1); ++i) 00508 { 00509 FieldDescription *fieldDesc=att->getType().getFieldDescription(i); 00510 Field *field=att->getField(i); 00511 if (field && fieldDesc) 00512 { 00513 field->getValueByStr(value); 00514 attachmentSize += strlen( fieldDesc->getName().str() ) + 1; 00515 attachmentSize += value.length() + 1; 00516 } 00517 else 00518 { 00519 FFATAL (("Invalid Attachment in ImageFileType::maxBufferSize()\n")); 00520 } 00521 } 00522 } 00523 */ 00524 00525 size = headSize + imageSize + attachmentSize; 00526 00527 FINFO (( "ImageFileType::maxBufferSize(): %lu (%lu/%lu/%lu)\n", 00528 size, headSize, imageSize, attachmentSize )); 00529 00530 return size; 00531 }
| void ImageFileType::dump | ( | void | ) | [inherited] |
The dump method just writes some object debugging info to the LOG stream
Definition at line 537 of file OSGImageFileType.cpp.
References osg::ImageFileType::_suffixList, osg::ImageFileType::getMimeType(), osg::LOG_DEBUG, and SLOG.
00538 { 00539 std::list<IDString>::iterator sI; 00540 00541 SLOG << getMimeType(); 00542 00543 if(_suffixList.empty()) 00544 { 00545 SLOG << ": Suffix: "; 00546 for(sI = _suffixList.begin(); sI != _suffixList.end(); sI++) 00547 { 00548 Log().stream(OSG::LOG_DEBUG) << sI->str() << " "; 00549 } 00550 } 00551 00552 std::cerr << std::endl; 00553 }
DATImageFileType DATImageFileType::_the [static, private] |
std::map< std::string, DATImageFileType::KeyType > DATImageFileType::_keyStrMap [static, private] |
std::map< std::string, DATImageFileType::FormatDesc > DATImageFileType::_formatStrMap [static, private] |
Definition at line 155 of file OSGDATImageFileType.h.
Referenced by initTypeMap(), read(), and write().
std::string osg::ImageFileType::_options [protected, inherited] |
Definition at line 182 of file OSGImageFileType.h.
Referenced by osg::ImageFileType::getOptions(), osg::ImageFileType::setOptions(), and osg::TIFImageFileType::write().
1.5.5