#include <HxImageFactory.h>
Public Methods | |
HxImageRep | fromSignature (const HxImageSignature &signature, HxSizes sizes) |
Uninitialized image with given signature and sizes. More... | |
HxImageRep | fromImage (const HxImageSignature &signature, HxImageRep src) |
New image with given signature. More... | |
HxImageRep | fromValue (const HxImageSignature &signature, HxSizes sizes, HxValue val) |
New image with given signature and sizes. More... | |
HxImageRep | fromByteData (int pixelDimensionality, int dimensions, HxSizes sizes, HxByte *data) |
New image with given signature and sizes. More... | |
HxImageRep | fromShortData (int pixelDimensionality, int dimensions, HxSizes sizes, short *data) |
New image with given signature and sizes. More... | |
HxImageRep | fromIntData (int pixelDimensionality, int dimensions, HxSizes sizes, int *data) |
New image with given signature and sizes. More... | |
HxImageRep | fromFloatData (int pixelDimensionality, int dimensions, HxSizes sizes, float *data) |
New image with given signature and sizes. More... | |
HxImageRep | fromDoubleData (int pixelDimensionality, int dimensions, HxSizes sizes, double *data) |
New image with given signature and sizes. More... | |
HxImageRep | fromGenerator (const HxImageSignature &signature, const HxImageGenerator *imgGenerator) const |
New image with given signature. More... | |
HxImageRep | fromNamedGenerator (const HxImageSignature &signature, HxString generatorName, HxTagList &tags) const |
New image with given signature. More... | |
HxImageRep | fromJavaRgb (const HxImageSignature &signature, HxSizes sizes, int *pixels) |
New image with given signature and sizes. More... | |
HxImageRep | fromGrayValue (const HxImageSignature &signature, HxSizes sizes, HxByte *pixels) |
New image with given signature and sizes. More... | |
HxImageRep | fromMatlab (const HxImageSignature &signature, HxSizes sizes, double *pixels) |
New image with given signature and sizes. More... | |
HxImageRep | fromImport (const HxImageSignature &signature, HxSizes sizes, HxString importOp, HxTagList &tags) |
New image with given signature and sizes. More... | |
HxImageRep | from2Images (HxImageRep i1, HxImageRep i2) |
New image with pixel values "stacked" from given arguments. More... | |
HxImageRep | from3Images (HxImageRep i1, HxImageRep i2, HxImageRep i3) |
New image with pixel values "stacked" from given arguments. More... | |
HxImageRep | fromFile (HxString fileName) |
New image read from file using scil-image. More... | |
HxImageRep | fromFile (HxString fileName, HxTagList &tags) |
New image read from file using HxImgFileIo lib. More... | |
bool | writeFile (HxImageRep img, HxString fileName, HxTagList &tags) const |
Write image to file using HxImgFileIo lib. More... | |
bool | imagesToFile (HxImageList imgs, HxString fileName, HxTagList &tags) const |
Write set of image to file using HxImgFileIo lib. More... | |
HxImageList | imagesFromFile (HxString fileName, HxTagList &tags) |
Read set of image from file using HxImgFileIo lib. More... | |
void | subscribeGenerator (HxString name, HxImageGenerator *) |
void | unSubscribeGenerator (HxString name, HxImageGenerator *) |
HxImageGenerator * | getGenerator (HxString name) const |
Static Public Methods | |
HxImageFactory & | instance () |
The one and only instance of this class. More... |
|
The one and only instance of this class.
00025 { 00026 static HxImageFactory theFactory; 00027 return theFactory; 00028 } |
|
Uninitialized image with given signature and sizes.
00033 { 00034 HxImageData* imgData = construct(signature, sizes); 00035 return HxImageRep(imgData); 00036 } |
|
New image with given signature. Sizes and data are taken from given image.
00040 { 00041 HxImageData* imgData = construct(signature, src.sizes()); 00042 if (imgData && src.pointee()) 00043 imgData->set(src.pointee()); 00044 return HxImageRep(imgData); 00045 } |
|
New image with given signature and sizes. Pixel data is initialized with given value.
00050 { 00051 HxImageData* imgData = construct(signature, sizes); 00052 if (imgData) 00053 imgData->set(val); 00054 return HxImageRep(imgData); 00055 } |
|
New image with given signature and sizes. Pixel data is initialized from given values.
00060 { 00061 HxImageSignature signature( 00062 dimensions, pixelDimensionality, INT_VALUE, sizeof(HxByte)<<3); 00063 HxImageData* imgData = construct(signature, sizes); 00064 if (imgData) 00065 imgData->import(data); 00066 return HxImageRep(imgData); 00067 } |
|
New image with given signature and sizes. Pixel data is initialized from given values.
00072 { 00073 HxImageSignature signature( 00074 dimensions, pixelDimensionality, INT_VALUE, sizeof(short)<<3); 00075 HxImageData* imgData = construct(signature, sizes); 00076 if (imgData) 00077 imgData->import(data); 00078 return HxImageRep(imgData); 00079 } |
|
New image with given signature and sizes. Pixel data is initialized from given values.
00084 { 00085 HxImageSignature signature( 00086 dimensions, pixelDimensionality, INT_VALUE, sizeof(int)<<3); 00087 HxImageData* imgData = construct(signature, sizes); 00088 if (imgData) 00089 imgData->import(data); 00090 return HxImageRep(imgData); 00091 } |
|
New image with given signature and sizes. Pixel data is initialized from given values.
00096 { 00097 HxImageSignature signature( 00098 dimensions, pixelDimensionality, REAL_VALUE, sizeof(float)<<3); 00099 HxImageData* imgData = construct(signature, sizes); 00100 if (imgData) 00101 imgData->import(data); 00102 return HxImageRep(imgData); 00103 } |
|
New image with given signature and sizes. Pixel data is initialized from given values.
00108 { 00109 HxImageSignature signature( 00110 dimensions, pixelDimensionality, REAL_VALUE, sizeof(double)<<3); 00111 HxImageData* imgData = construct(signature, sizes); 00112 if (imgData) 00113 imgData->import(data); 00114 return HxImageRep(imgData); 00115 } |
|
New image with given signature. Pixel data and size are determined by image generator.
00121 { 00122 HxImageData* imgData = construct(signature, imgGenerator->domainSize()); 00123 HxTagList tags; 00124 HxAddTag(tags, "imageGenerator", imgGenerator); 00125 if (imgData) 00126 { 00127 imgData->inout("generate", tags); 00128 } 00129 return HxImageRep(imgData); 00130 } |
|
New image with given signature. Pixel data and size are determined by image generator.
00136 { 00137 HxImageGenerator* generator = getGenerator(generatorName); 00138 00139 if (!generator) 00140 return HxImageRep(); 00141 00142 generator->init(tags); 00143 HxImageData* imgData = construct(signature, generator->domainSize()); 00144 HxTagList ttags; 00145 HxAddTag(ttags, "imageGenerator", generator); 00146 if (imgData) 00147 { 00148 imgData->inout("generate", ttags); 00149 } 00150 return HxImageRep(imgData); 00151 } |
|
New image with given signature and sizes. Pixel data is initialized from given values. The given values are stored in Java RGB format.
00156 { 00157 HxImageData* imgData = construct(signature, sizes); 00158 if (imgData) 00159 imgData->set(pixels); 00160 return HxImageRep(imgData); 00161 } |
|
New image with given signature and sizes. Pixel data is initialized from given values.
00166 { 00167 HxImageData* imgData = construct(signature, sizes); 00168 if (imgData) 00169 imgData->set(pixels); 00170 return HxImageRep(imgData); 00171 } |
|
New image with given signature and sizes. Pixel values are initialized from given values. The given values are stored in Matlab format.
00176 { 00177 HxImageData* imgData = construct(signature, sizes); 00178 if (imgData) 00179 imgData->set(pixels); 00180 return HxImageRep(imgData); 00181 } |
|
New image with given signature and sizes. Pixel values are initialized by specified import operator.
00187 { 00188 HxImageData* imgData = construct(signature, sizes); 00189 if (imgData) 00190 imgData->inout(importOp, tags); 00191 return HxImageRep(imgData); 00192 } |
|
New image with pixel values "stacked" from given arguments. For example, if i1 and i2 are scalar images the pixel values in the new image are 2-vectors. Result may need exceed highest pixel dimensionality.
00196 { 00197 STD_OSTREAM& errorStream = HxEnvironment::instance()->errorStream(); 00198 00199 if (!(i1 && i2)) { 00200 errorStream << "Source images may not be null" << STD_ENDL; 00201 HxEnvironment::instance()->flush(); 00202 return HxImageRep(); 00203 } 00204 if (i1.signature() != i2.signature()) { 00205 errorStream << "Source images differ in type" << STD_ENDL; 00206 HxEnvironment::instance()->flush(); 00207 return HxImageRep(); 00208 } 00209 if (i1.sizes() != i2.sizes()) { 00210 errorStream << "Source images differ in size" << STD_ENDL; 00211 HxEnvironment::instance()->flush(); 00212 return HxImageRep(); 00213 } 00214 HxImageSignature signature(i1.signature()); 00215 HxSizes sizes(i1.sizes()); 00216 00217 if (signature.pixelDimensionality() != 1) { 00218 errorStream << "HxImageRep: images must have pixelDimensionality of 1" 00219 << STD_ENDL; 00220 HxEnvironment::instance()->flush(); 00221 return HxImageRep(); 00222 } 00223 signature.setPixelDimensionality(2); 00224 HxImageData* imgData = construct(signature, sizes); 00225 if (imgData) 00226 { 00227 HxTagList tags; 00228 imgData->binaryPixOp( 00229 i1.pointee(), i2.pointee(), "vector2d", tags); 00230 } 00231 return HxImageRep(imgData); 00232 } |
|
New image with pixel values "stacked" from given arguments. For example, if i1, i2, and i3 are scalar images the pixel values in the new image are 3-vectors. Result may need exceed highest pixel dimensionality.
00236 { 00237 STD_OSTREAM& errorStream = HxEnvironment::instance()->errorStream(); 00238 if (!(i1 && i2 && i3)) { 00239 errorStream << "Source images may not be null" << STD_ENDL; 00240 HxEnvironment::instance()->flush(); 00241 return HxImageRep(); 00242 } 00243 if ((i1.signature() != i2.signature()) 00244 || (i2.signature() != i3.signature())) { 00245 errorStream << "Source images differ in type" << STD_ENDL; 00246 HxEnvironment::instance()->flush(); 00247 return HxImageRep(); 00248 } 00249 if ((i1.sizes() != i2.sizes()) || (i2.sizes() != i3.sizes())) { 00250 errorStream << "Source images differ in size" << STD_ENDL; 00251 HxEnvironment::instance()->flush(); 00252 return HxImageRep(); 00253 } 00254 HxImageSignature signature(i1.signature()); 00255 HxSizes sizes(i1.sizes()); 00256 if (signature.pixelDimensionality() != 1) { 00257 errorStream << "HxImageRep: images must have pixelDimensionality of 1" 00258 << STD_ENDL; 00259 HxEnvironment::instance()->flush(); 00260 return HxImageRep(); 00261 } 00262 signature.setPixelDimensionality(3); 00263 HxImageData* imgData = construct(signature, sizes); 00264 if (imgData) 00265 { 00266 HxTagList tags; 00267 HxImageData *pointees[3] = {i1.pointee(), i2.pointee(), i3.pointee()}; 00268 imgData->multiPixOp(pointees, 3, "vector3d", tags); 00269 } 00270 return HxImageRep(imgData); 00271 } |
|
New image read from file using scil-image.
00275 { 00276 HxImageData* imgData 00277 = HxImageSiLib::getHxImageSiLib()->readFile(fileName.data()); 00278 return HxImageRep(imgData); 00279 } |
|
New image read from file using HxImgFileIo lib.
00285 { 00286 HxString extName = HxSystem::instance().extName(fileName); 00287 00288 HxImgFileReader* reader = HxImgFileIoTable::instance().getReader(extName); 00289 00290 int imgNum = HxGetTag(tags, "setImage", 0); 00291 00292 if (!reader) 00293 { 00294 HxEnvironment::instance()->errorStream() 00295 << "Unknown file type \"" << extName << "\"" << STD_ENDL; 00296 HxEnvironment::instance()->flush(); 00297 return HxImageRep(); 00298 } 00299 00300 if (reader->openFile(fileName)) 00301 { 00302 HxImageData* imgData = 0; 00303 00304 bool imgIsSet = reader->setImage(imgNum); 00305 reader->getInfo(tags); 00306 if (imgIsSet) 00307 { 00308 HxPointZ begin(0, 0, 0); 00309 HxTagList tags; 00310 imgData = construct( 00311 reader->getSignature(), reader->getImageSize()); 00312 HxString inOutOp = 00313 HxString("importPix<") + reader->getDataTypeString() + ">"; 00314 while (reader->moreData()) 00315 { 00316 HxBoundingBox boundingBox(reader->getDataSize()); 00317 boundingBox = boundingBox.translate(reader->getDataBegin()); 00318 HxAddTag(tags, "boundingBox", boundingBox); 00319 void* data = reader->getData(); 00320 if (data) 00321 imgData->inout( 00322 data, reader->getDataTypeString(), "importPix", tags); 00323 } 00324 } 00325 else 00326 { 00327 HxEnvironment::instance()->errorStream() 00328 << "" << reader->errorDescription() << STD_ENDL; 00329 HxEnvironment::instance()->flush(); 00330 } 00331 reader->closeFile(); 00332 return imgData ? HxImageRep(imgData) : HxImageRep(); 00333 } 00334 else 00335 { 00336 HxEnvironment::instance()->errorStream() 00337 << "" << reader->errorDescription() << STD_ENDL; 00338 HxEnvironment::instance()->flush(); 00339 } 00340 00341 return HxImageRep(); 00342 } |
|
Write image to file using HxImgFileIo lib.
00347 { 00348 if (!img) return false; 00349 00350 HxString extName = HxSystem::instance().extName(fileName); 00351 00352 HxImgFileWriter* writer = HxImgFileIoTable::instance().getWriter(extName); 00353 00354 if (!writer) 00355 { 00356 HxEnvironment::instance()->errorStream() 00357 << "Unknown file type \"" << extName << "\"" << STD_ENDL; 00358 HxEnvironment::instance()->flush(); 00359 return false; 00360 } 00361 00362 bool asRgb = HxGetTag(tags, "asRgb", true); 00363 HxAddTag(tags, "asRgb", asRgb); 00364 00365 if (!(writer->openFile(fileName) && 00366 writer->setSignature(img.signature()) && 00367 writer->setImageSize(img.sizes()) && 00368 writer->setInfo(tags))) 00369 { 00370 HxEnvironment::instance()->errorStream() 00371 << "" << writer->errorDescription() << STD_ENDL; 00372 HxEnvironment::instance()->flush(); 00373 return false; 00374 } 00375 00376 HxPointZ begin(0, 0, 0); 00377 HxTagList opTags; 00378 00379 while (writer->moreData()) 00380 { 00381 HxString exportName = "exportPix<" + writer->getDataTypeString() + ">"; 00382 HxBoundingBox boundingBox(writer->getDataSize()); 00383 boundingBox = boundingBox.translate(writer->getDataBegin()); 00384 HxAddTag(opTags, "boundingBox", boundingBox); 00385 void* data = writer->getData(); 00386 if (data) 00387 { 00388 HxAddTag(opTags, "dataPtr", data); 00389 img.exportOp(exportName, opTags); 00390 writer->putData(data); 00391 } 00392 } 00393 00394 writer->closeFile(); 00395 00396 return true; 00397 } |
|
Write set of image to file using HxImgFileIo lib.
00466 { 00467 if (!imgs.size()) return false; 00468 00469 HxString extName = HxSystem::instance().extName(fileName); 00470 00471 HxImgFileWriter* writer = HxImgFileIoTable::instance().getWriter(extName); 00472 00473 if (!writer) 00474 { 00475 HxEnvironment::instance()->errorStream() 00476 << "Unknown file type \"" << extName << "\"" << STD_ENDL; 00477 HxEnvironment::instance()->flush(); 00478 return false; 00479 } 00480 00481 bool asRgb = HxGetTag(tags, "asRgb", true); 00482 HxAddTag(tags, "asRgb", asRgb); 00483 00484 HxImageList::const_iterator img = imgs.begin(); 00485 00486 if (!(writer->firstImage() && 00487 writer->openFile(fileName) && 00488 writer->setSignature((*img).signature()) && 00489 writer->setImageSize((*img).sizes()) && 00490 writer->setInfo(tags))) 00491 { 00492 HxEnvironment::instance()->errorStream() 00493 << "" << writer->errorDescription() << STD_ENDL; 00494 HxEnvironment::instance()->flush(); 00495 return false; 00496 } 00497 00498 HxTagList opTags; 00499 00500 while (img != imgs.end()) { 00501 while (writer->moreData()) 00502 { 00503 HxString exportName = "exportPix<" + writer->getDataTypeString() + ">"; 00504 HxBoundingBox boundingBox(writer->getDataSize()); 00505 boundingBox = boundingBox.translate(writer->getDataBegin()); 00506 HxAddTag(opTags, "boundingBox", boundingBox); 00507 void* data = writer->getData(); 00508 if (data) 00509 { 00510 HxAddTag(opTags, "dataPtr", data); 00511 (*img).exportOp(exportName, opTags); 00512 writer->putData(data); 00513 } 00514 } 00515 img++; 00516 if (img != imgs.end()) { 00517 writer->nextImage(); 00518 if (!( writer->setSignature((*img).signature()) && 00519 writer->setImageSize((*img).sizes()) && 00520 writer->setInfo(tags))) 00521 { 00522 HxEnvironment::instance()->errorStream() 00523 << "" << writer->errorDescription() << STD_ENDL; 00524 HxEnvironment::instance()->flush(); 00525 return false; 00526 } 00527 } 00528 } 00529 00530 writer->closeFile(); 00531 00532 return true; 00533 } |
|
Read set of image from file using HxImgFileIo lib.
00401 { 00402 HxString extName = HxSystem::instance().extName(fileName); 00403 00404 HxImgFileReader* reader = HxImgFileIoTable::instance().getReader(extName); 00405 00406 HxImageList imgs; 00407 00408 if (!reader) 00409 { 00410 HxEnvironment::instance()->errorStream() 00411 << "Unknown file type \"" << extName << "\"" << STD_ENDL; 00412 HxEnvironment::instance()->flush(); 00413 return imgs; 00414 } 00415 00416 if (reader->openFile(fileName)) 00417 { 00418 int imgNum; 00419 for (imgNum = 0; imgNum < reader->imageCount(); imgNum++) { 00420 bool imgIsSet = reader->setImage(imgNum); 00421 reader->getInfo(tags); 00422 00423 if (imgIsSet) 00424 { 00425 HxImageData* imgData = 0; 00426 HxPointZ begin(0, 0, 0); 00427 HxTagList tags; 00428 imgData = construct( 00429 reader->getSignature(), reader->getImageSize()); 00430 HxString inOutOp = 00431 HxString("importPix<") + reader->getDataTypeString() + ">"; 00432 while (reader->moreData()) 00433 { 00434 HxBoundingBox boundingBox(reader->getDataSize()); 00435 boundingBox = boundingBox.translate(reader->getDataBegin()); 00436 HxAddTag(tags, "boundingBox", boundingBox); 00437 void* data = reader->getData(); 00438 if (data && imgData) 00439 imgData->inout( 00440 data, reader->getDataTypeString(), "importPix", tags); 00441 } 00442 imgs += imgData ? HxImageRep(imgData) : HxImageRep(); 00443 } 00444 else 00445 { 00446 HxEnvironment::instance()->errorStream() 00447 << "" << reader->errorDescription() << STD_ENDL; 00448 HxEnvironment::instance()->flush(); 00449 } 00450 } 00451 reader->closeFile(); 00452 } 00453 else 00454 { 00455 HxEnvironment::instance()->errorStream() 00456 << "" << reader->errorDescription() << STD_ENDL; 00457 HxEnvironment::instance()->flush(); 00458 } 00459 00460 return imgs; 00461 } |