Main Page   Class Overview   Pixels   Images   Geometry   Quick Index  

HxImageFactory Class Reference

Factory for HxImageRep objects. More...

#include <HxImageFactory.h>

List of all members.

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...


Detailed Description

Factory for HxImageRep objects.


Member Function Documentation

HxImageFactory & HxImageFactory::instance   [static]
 

The one and only instance of this class.

00025 {
00026     static HxImageFactory theFactory;
00027     return theFactory;
00028 }

HxImageRep HxImageFactory::fromSignature const HxImageSignature   signature,
HxSizes    sizes
 

Uninitialized image with given signature and sizes.

00033 {
00034     HxImageData* imgData = construct(signature, sizes);
00035     return HxImageRep(imgData);
00036 }

HxImageRep HxImageFactory::fromImage const HxImageSignature   signature,
HxImageRep    src
 

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 }

HxImageRep HxImageFactory::fromValue const HxImageSignature   signature,
HxSizes    sizes,
HxValue    val
 

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 }

HxImageRep HxImageFactory::fromByteData int    pixelDimensionality,
int    dimensions,
HxSizes    sizes,
HxByte *    data
 

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 }

HxImageRep HxImageFactory::fromShortData int    pixelDimensionality,
int    dimensions,
HxSizes    sizes,
short *    data
 

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 }

HxImageRep HxImageFactory::fromIntData int    pixelDimensionality,
int    dimensions,
HxSizes    sizes,
int *    data
 

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 }

HxImageRep HxImageFactory::fromFloatData int    pixelDimensionality,
int    dimensions,
HxSizes    sizes,
float *    data
 

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 }

HxImageRep HxImageFactory::fromDoubleData int    pixelDimensionality,
int    dimensions,
HxSizes    sizes,
double *    data
 

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 }

HxImageRep HxImageFactory::fromGenerator const HxImageSignature   signature,
const HxImageGenerator *    imgGenerator
const
 

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 }

HxImageRep HxImageFactory::fromNamedGenerator const HxImageSignature   signature,
HxString    generatorName,
HxTagList   tags
const
 

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 }

HxImageRep HxImageFactory::fromJavaRgb const HxImageSignature   signature,
HxSizes    sizes,
int *    pixels
 

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 }

HxImageRep HxImageFactory::fromGrayValue const HxImageSignature   signature,
HxSizes    sizes,
HxByte *    pixels
 

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 }

HxImageRep HxImageFactory::fromMatlab const HxImageSignature   signature,
HxSizes    sizes,
double *    pixels
 

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 }

HxImageRep HxImageFactory::fromImport const HxImageSignature   signature,
HxSizes    sizes,
HxString    importOp,
HxTagList   tags
 

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 }

HxImageRep HxImageFactory::from2Images HxImageRep    i1,
HxImageRep    i2
 

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 }

HxImageRep HxImageFactory::from3Images HxImageRep    i1,
HxImageRep    i2,
HxImageRep    i3
 

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 }

HxImageRep HxImageFactory::fromFile HxString    fileName
 

New image read from file using scil-image.

00275 {
00276     HxImageData* imgData
00277         = HxImageSiLib::getHxImageSiLib()->readFile(fileName.data());
00278     return HxImageRep(imgData);
00279 }

HxImageRep HxImageFactory::fromFile HxString    fileName,
HxTagList   tags
 

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 }

bool HxImageFactory::writeFile HxImageRep    img,
HxString    fileName,
HxTagList   tags
const
 

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 }

bool HxImageFactory::imagesToFile HxImageList    imgs,
HxString    fileName,
HxTagList   tags
const
 

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 }

HxImageList HxImageFactory::imagesFromFile HxString    fileName,
HxTagList   tags
 

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 }


The documentation for this class was generated from the following files:
Generated on Tue Jan 8 13:59:25 2002 for C++Reference by doxygen1.2.12 written by Dimitri van Heesch, © 1997-2001