#include <OSGGIFImageFileType.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 | ~GIFImageFileType (void) |
Read/Write | |
| virtual bool | validateHeader (const Char8 *fileName, bool &implemented) |
| virtual bool | read (ImagePtr &image, std::istream &is, const std::string &mimetype) |
| virtual std::string | determineMimetypeFromStream (std::istream &is) |
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, const Char8 *fileName) |
| virtual bool | write (const ImagePtr &image, const Char8 *fileName) |
| virtual bool | write (const ImagePtr &image, std::ostream &os, const std::string &mimetype) |
Raw Store/Restore | |
| virtual UInt64 | restoreData (ImagePtr &image, const UChar8 *buffer, Int32 memSize=-1) |
| virtual UInt64 | storeData (const ImagePtr &image, UChar8 *buffer, Int32 memSize=-1) |
dump | |
| void | dump (void) |
Static Public Member Functions | |
Get Method | |
| static GIFImageFileType & | the (void) |
Protected Member Functions | |
Default Constructor | |
| GIFImageFileType (const Char8 *mimeType, const Char8 *suffixArray[], UInt16 suffixByteCount) | |
Protected Attributes | |
MTD Header | |
| std::string | _options |
Private Member Functions | |
Copy Constructor | |
| GIFImageFileType (const GIFImageFileType &obj) | |
Copy Operator | |
| const GIFImageFileType & | operator= (const GIFImageFileType &obj) |
Static Private Attributes | |
| static GIFImageFileType | _the |
Definition at line 56 of file OSGGIFImageFileType.h.
anonymous enum [inherited] |
Definition at line 66 of file OSGImageFileType.h.
00067 { 00068 OSG_READ_SUPPORTED = 1, 00069 OSG_WRITE_SUPPORTED = 2 00070 };
| GIFImageFileType::~GIFImageFileType | ( | void | ) | [virtual] |
| GIFImageFileType::GIFImageFileType | ( | const Char8 * | mimeType, | |
| const Char8 * | suffixArray[], | |||
| UInt16 | suffixByteCount | |||
| ) | [protected] |
Constructor used for the singleton object
Definition at line 549 of file OSGGIFImageFileType.cpp.
00551 : 00552 ImageFileType(mimeType, suffixArray, suffixByteCount) 00553 {}
| osg::GIFImageFileType::GIFImageFileType | ( | const GIFImageFileType & | obj | ) | [private] |
| bool GIFImageFileType::validateHeader | ( | const Char8 * | fileName, | |
| bool & | implemented | |||
| ) | [virtual] |
Reimplemented from osg::ImageFileType.
Definition at line 521 of file OSGGIFImageFileType.cpp.
00522 { 00523 implemented = true; 00524 00525 if(fileName == NULL) 00526 return false; 00527 00528 FILE *file = fopen(fileName, "rb"); 00529 if(file == NULL) 00530 return false; 00531 00532 std::string magic; 00533 magic.resize(4); 00534 fread((void *) &magic[0], 4, 1, file); 00535 fclose(file); 00536 00537 if(magic == "GIF8") 00538 { 00539 return true; 00540 } 00541 00542 return false; 00543 }
| bool GIFImageFileType::read | ( | ImagePtr & | image, | |
| std::istream & | is, | |||
| const std::string & | mimetype | |||
| ) | [virtual] |
Tries to fill the image object with the data read from the given input stream. Returns true on success.
Reimplemented from osg::ImageFileType.
Definition at line 200 of file OSGGIFImageFileType.cpp.
References FDEBUG, FWARNING, osg::Image::OSG_INVALID_PF, osg::Image::OSG_L_PF, osg::Image::OSG_LA_PF, osg::Image::OSG_RGB_PF, and osg::Image::OSG_RGBA_PF.
00202 { 00203 bool retCode = false; 00204 00205 #ifdef OSG_WITH_GIF 00206 Image::PixelFormat pixelFormat = osg::Image::OSG_INVALID_PF; 00207 GIFStream *gifStream = GIFRead(is); 00208 GIFData *gifData = 0; 00209 bool isColor; 00210 int i, j, destI, lineSize, lineEnd; 00211 unsigned red, green, blue; 00212 int transparentIndex; 00213 int width = 0, height = 0, channel = 0, xOff = 0, yOff = 0; 00214 unsigned char *srcData = 0, *destData = 0; 00215 int colorIndex; 00216 unsigned frameCount = 0, currentFrame = 0; 00217 unsigned char *colorMap = 0; 00218 00219 // int imageSize = 0; 00220 int colorMapSize; 00221 Time frameDelay; 00222 00223 if(gifStream) 00224 { 00225 frameCount = 0; 00226 for(gifData = gifStream->data; gifData; gifData = gifData->next) 00227 { 00228 if(gifData->type == gif_image) 00229 frameCount++; 00230 } 00231 } 00232 00233 FDEBUG(("GIF Frames: %d\n", frameCount)); 00234 00235 if(gifStream) 00236 { 00237 for(gifData = gifStream->data; gifData; gifData = gifData->next) 00238 { 00239 switch(gifData->type) 00240 { 00241 case gif_image: 00242 if(frameCount) 00243 { 00244 FDEBUG(("Try to copy GIF Anim Frame %d/%d\n", 00245 (currentFrame + 1), frameCount)); 00246 } 00247 00248 // get the att. 00249 transparentIndex = gifData->info.transparent; 00250 frameDelay = float(gifData->info.delayTime) / 100.0f; 00251 width = gifData->width; 00252 height = gifData->height; 00253 xOff = gifData->x; 00254 yOff = gifData->y; 00255 00256 // check if the movie is color or greyscale 00257 isColor = false; 00258 if(gifData->data.image.cmapSize > 0) 00259 { 00260 colorMapSize = gifData->data.image.cmapSize; 00261 colorMap = (unsigned char *) gifData->data.image.cmapData; 00262 00263 // cout << "INFO: Use gifData colorMap" << endl; 00264 } 00265 else if(gifStream->cmapSize > 0) 00266 { 00267 colorMapSize = gifStream->cmapSize; 00268 colorMap = (unsigned char *) gifStream->cmapData; 00269 00270 // cout << "INFO: Use gifStream colorMap" << endl; 00271 } 00272 else 00273 { 00274 FWARNING(("Bad color map in GIFImageFileType::read()\n")); 00275 colorMapSize = 0; 00276 } 00277 00278 for(i = 0; i < colorMapSize; i++) 00279 { 00280 if(i != transparentIndex) 00281 { 00282 red = colorMap[i * 3 + 0]; 00283 green = colorMap[i * 3 + 1]; 00284 blue = colorMap[i * 3 + 2]; 00285 if(red != green || red != blue) 00286 { 00287 isColor = true; 00288 break; 00289 } 00290 } 00291 } 00292 00293 // calculate the movie channel 00294 channel = (isColor ? 3 : 1) + (transparentIndex >= 0 ? 1 : 0); 00295 00296 if(currentFrame) 00297 { 00298 // is not the first frame 00299 if((channel == image->getBpp()) && 00300 (width == image->getWidth()) && 00301 (height == image->getHeight())) 00302 { 00303 destData = image->getData(0, currentFrame); 00304 } 00305 else 00306 { 00307 destData = image->getData(0, currentFrame); 00308 00309 // This is probably wrong, but it's a start 00310 switch(gifData->info.disposal) 00311 { 00312 case gif_no_disposal: 00313 break; 00314 00315 case gif_keep_disposal: 00316 memcpy(destData, 00317 image->getData(0, currentFrame - 1), 00318 image->getWidth () * 00319 image->getHeight() * 00320 channel); 00321 break; 00322 00323 case gif_color_restore: 00324 { 00325 unsigned char r,g,b,a; 00326 UInt32 bgindex = gifStream->background; 00327 unsigned char *d = destData; 00328 00329 r = colorMap[bgindex * 3 + 0]; 00330 g = colorMap[bgindex * 3 + 1]; 00331 b = colorMap[bgindex * 3 + 2]; 00332 a = (bgindex == transparentIndex) ? 0 : 255; 00333 00334 for(UInt32 pixel = image->getWidth () * 00335 image->getHeight(); 00336 pixel > 0; --pixel, d += channel) 00337 { 00338 d[0] = r; 00339 d[1] = g; 00340 d[2] = b; 00341 if(channel == 4) 00342 d[3] = a; 00343 } 00344 } 00345 break; 00346 00347 case gif_image_restore: 00348 memcpy(destData, 00349 image->getData(0, (currentFrame >= 2) ? 00350 (currentFrame - 2):0), 00351 image->getWidth () * 00352 image->getHeight() * 00353 channel); 00354 break; 00355 default: 00356 FWARNING(("Unknown GIF disposal mode %d\n", 00357 gifData->info.disposal)); 00358 break; 00359 } 00360 //currentFrame++; 00361 // continue; 00362 } 00363 } 00364 else 00365 { 00366 switch(channel) 00367 { 00368 case 1: 00369 pixelFormat = Image::OSG_L_PF; 00370 break; 00371 case 2: 00372 pixelFormat = Image::OSG_LA_PF; 00373 break; 00374 case 3: 00375 pixelFormat = Image::OSG_RGB_PF; 00376 break; 00377 case 4: 00378 pixelFormat = Image::OSG_RGBA_PF; 00379 break; 00380 }; 00381 image->set(pixelFormat, width, height, 1, 1, frameCount, 00382 frameDelay); 00383 destData = image->getData(); 00384 } 00385 00386 // copy the image data) 00387 lineSize = image->getWidth() * channel; 00388 lineEnd = width * channel + xOff * channel; 00389 srcData = gifData->data.image.data; 00390 destData = destData + ((image->getHeight() - yOff - 1) * lineSize); 00391 00392 switch(channel) 00393 { 00394 case 1: // Greyscale without Alpha 00395 destI = 0; 00396 for(i = width * height; i--;) 00397 { 00398 destData[destI++] = colorMap[*srcData++ *3]; 00399 if(destI >= lineSize) 00400 { 00401 destI = 0; 00402 destData -= lineSize; 00403 } 00404 } 00405 break; 00406 00407 case 2: // Greyscale with Alpha 00408 destI = 0; 00409 for(i = width * height; i--;) 00410 { 00411 colorIndex = *srcData++; 00412 if(colorIndex == transparentIndex) 00413 { 00414 destData[destI++] = 0; 00415 destData[destI++] = 0; 00416 } 00417 else 00418 { 00419 destData[destI++] = colorMap[colorIndex * 3]; 00420 destData[destI++] = 255; 00421 } 00422 00423 if(destI >= lineSize) 00424 { 00425 destI = 0; 00426 destData -= lineSize; 00427 } 00428 } 00429 break; 00430 00431 case 3: // RGB without Alpha 00432 destI = 0; 00433 for(i = width * height; i--;) 00434 { 00435 colorIndex = *srcData++; 00436 for(j = 0; j < 3; j++) 00437 { 00438 destData[destI++] = colorMap[colorIndex * 3 + j]; 00439 } 00440 00441 if(destI >= lineSize) 00442 { 00443 destI = 0; 00444 destData -= lineSize; 00445 } 00446 } 00447 break; 00448 00449 case 4: // RGB with Alpha 00450 destI = xOff * 4; 00451 00452 for(i = width * height; i--;) 00453 { 00454 colorIndex = *srcData++; 00455 if(colorIndex == transparentIndex) 00456 { 00457 /* 00458 for(j = 0; j < 3; j++) 00459 destData[destI++] = 0; // RGB 00460 destData[destI++] = 0; // ALPHA 00461 */ 00462 destI += 4; 00463 } 00464 else 00465 { 00466 for(j = 0; j < 3; j++) 00467 { 00468 destData[destI++] = 00469 colorMap[colorIndex * 3 + j]; // RGB 00470 } 00471 00472 destData[destI++] = 255; // ALPHA 00473 } 00474 00475 if(destI >= lineEnd) 00476 { 00477 destI = xOff * 4; 00478 destData -= lineSize; 00479 } 00480 } 00481 break; 00482 } 00483 00484 retCode = true; 00485 00486 currentFrame++; 00487 00488 break; 00489 case gif_comment: 00490 break; 00491 case gif_text: 00492 break; 00493 } 00494 } 00495 00496 GIFFree(gifStream); 00497 } 00498 else 00499 retCode = false; 00500 #endif 00501 return retCode; 00502 }
| std::string GIFImageFileType::determineMimetypeFromStream | ( | std::istream & | is | ) | [virtual] |
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 from osg::ImageFileType.
Definition at line 510 of file OSGGIFImageFileType.cpp.
References osg::ImageFileType::getMimeType().
00511 { 00512 char filecode[4]; 00513 is.read(filecode, 4); 00514 is.seekg(-4, std::ios::cur); 00515 return strncmp(filecode, "GIF8", 4) == 0 ? 00516 std::string(getMimeType()) : std::string(); 00517 }
| GIFImageFileType & GIFImageFileType::the | ( | void | ) | [static] |
Class method to get the singleton Object
Definition at line 190 of file OSGGIFImageFileType.cpp.
References _the.
00191 { 00192 return _the; 00193 }
| const GIFImageFileType& osg::GIFImageFileType::operator= | ( | const GIFImageFileType & | obj | ) | [private] |
| 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(), 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 }
Reimplemented in osg::DATImageFileType, and osg::HDRImageFileType.
Definition at line 141 of file OSGImageFileType.cpp.
Referenced by osg::ImageFileHandler::read().
00142 { 00143 std::ifstream is(fileName, std::ios::binary); 00144 if (is.good() == false) 00145 return false; 00146 return read(image, is, std::string()); 00147 }
Reimplemented in osg::DATImageFileType, and osg::HDRImageFileType.
Definition at line 151 of file OSGImageFileType.cpp.
Referenced by osg::ImageFileHandler::write().
00152 { 00153 std::ofstream os(fileName, std::ios::binary); 00154 if (os.good() == false) 00155 return false; 00156 return write(image, os, std::string()); 00157 }
| 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 }
| 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 }
| UInt64 ImageFileType::restoreData | ( | ImagePtr & | image, | |
| const UChar8 * | buffer, | |||
| Int32 | memSize = -1 | |||
| ) | [virtual, inherited] |
Abstract restore method. Should be overwriten by a concrete derived class. Tries to restore the image data from the given memblock.
Reimplemented in osg::DATImageFileType, osg::EXRImageFileType, osg::HDRImageFileType, osg::JPGImageFileType, osg::MTDImageFileType, and osg::PNGImageFileType.
Definition at line 253 of file OSGImageFileType.cpp.
References FWARNING, and osg::ImageFileType::getMimeType().
00256 { 00257 FWARNING(("ImageXFileType::restoreData() not impl. for mimeType %s\n", 00258 getMimeType())); 00259 00260 return 0; 00261 }
| UInt64 ImageFileType::storeData | ( | const ImagePtr & | image, | |
| UChar8 * | buffer, | |||
| Int32 | memSize = -1 | |||
| ) | [virtual, inherited] |
Abstract restore method. Should be overwriten by a concrete derived class. Tries to store the given image data to the given memblock
Reimplemented in osg::DATImageFileType, osg::EXRImageFileType, osg::HDRImageFileType, osg::JPGImageFileType, osg::MTDImageFileType, and osg::PNGImageFileType.
Definition at line 268 of file OSGImageFileType.cpp.
References FWARNING, and osg::ImageFileType::getMimeType().
Referenced by osg::ImageFileType::store().
00271 { 00272 FWARNING(("ImageXFileType::storeData() not impl. for mimeType %s\n", 00273 getMimeType())); 00274 00275 return 0; 00276 }
| 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 }
GIFImageFileType GIFImageFileType::_the [static, private] |
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