Horus Doc || C++ Reference || Class Overview   Pixels   Images   Detector   Geometry   Registry || Doxygen's 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, 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.

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

HxImageRep HxImageFactory::fromSignature const HxImageSignature   signature,
HxSizes    sizes
 

Uninitialized image with given signature and sizes.

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

HxImageRep HxImageFactory::fromImage const HxImageSignature   signature,
HxImageRep    src
 

New image with given signature.

Sizes and data are taken from given image.

00039 {
00040     HxImageData* imgData = construct(signature, src.sizes());
00041     if (imgData && src.pointee())
00042         imgData->set(src.pointee());
00043     return HxImageRep(imgData);
00044 }

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

New image with given signature and sizes.

Pixel data is initialized with given value.

00049 {
00050     HxImageData* imgData = construct(signature, sizes);
00051     if (imgData)
00052         imgData->set(val);
00053     return HxImageRep(imgData);
00054 }

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.

00059 {
00060     HxImageSignature signature(
00061         dimensions, pixelDimensionality, INT_VALUE, sizeof(HxByte)<<3);
00062     HxImageData* imgData = construct(signature, sizes);
00063     if (imgData)
00064         imgData->import(data);
00065     return HxImageRep(imgData);
00066 }

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.

00071 {
00072     HxImageSignature signature(
00073         dimensions, pixelDimensionality, INT_VALUE, sizeof(short)<<3);
00074     HxImageData* imgData = construct(signature, sizes);
00075     if (imgData)
00076         imgData->import(data);
00077     return HxImageRep(imgData);
00078 }

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.

00083 {
00084     HxImageSignature signature(
00085         dimensions, pixelDimensionality, INT_VALUE, sizeof(int)<<3);
00086     HxImageData* imgData = construct(signature, sizes);
00087     if (imgData)
00088         imgData->import(data);
00089     return HxImageRep(imgData);
00090 }

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.

00095 {
00096     HxImageSignature signature(
00097         dimensions, pixelDimensionality, REAL_VALUE, sizeof(float)<<3);
00098     HxImageData* imgData = construct(signature, sizes);
00099     if (imgData)
00100         imgData->import(data);
00101     return HxImageRep(imgData);
00102 }

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.

00107 {
00108     HxImageSignature signature(
00109         dimensions, pixelDimensionality, REAL_VALUE, sizeof(double)<<3);
00110     HxImageData* imgData = construct(signature, sizes);
00111     if (imgData)
00112         imgData->import(data);
00113     return HxImageRep(imgData);
00114 }

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

New image with given signature.

Pixel data and size are determined by image generator.

00120 {
00121     HxImageData* imgData = construct(signature, imgGenerator->domainSize());
00122     HxTagList tags;
00123     HxAddTag(tags, "imageGenerator", imgGenerator);
00124     if (imgData)
00125     {
00126         imgData->inout("generate", tags);
00127     }
00128     return HxImageRep(imgData);
00129 }

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.

00135 {
00136     HxImageGenerator* generator = getGenerator(generatorName);
00137 
00138     if (!generator)
00139         return HxImageRep();
00140 
00141     generator->init(tags);
00142     HxImageData* imgData = construct(signature, generator->domainSize());
00143     HxTagList ttags;
00144     HxAddTag(ttags, "imageGenerator", generator);
00145     if (imgData)
00146     {
00147         imgData->inout("generate", ttags);
00148     }
00149     return HxImageRep(imgData);
00150 }

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.

00155 {
00156     HxImageData* imgData = construct(signature, sizes);
00157     if (imgData)
00158         imgData->set(pixels);
00159     return HxImageRep(imgData);
00160 }

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

New image with given signature and sizes.

Pixel data is initialized from given values.

00165 {
00166     HxImageData* imgData = construct(signature, sizes);
00167     if (imgData)
00168         imgData->set(pixels);
00169     return HxImageRep(imgData);
00170 }

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.

00175 {
00176     HxImageData* imgData = construct(signature, sizes);
00177     if (imgData)
00178         imgData->set(pixels);
00179     return HxImageRep(imgData);
00180 }

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.

00186 {
00187     HxImageData* imgData = construct(signature, sizes);
00188     if (imgData)
00189         imgData->inout(importOp, tags);
00190     return HxImageRep(imgData);
00191 }

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.

00195 {
00196     STD_OSTREAM& errorStream = HxEnvironment::instance()->errorStream();
00197 
00198     if (!(i1 && i2)) {
00199         errorStream << "Source images may not be null" << STD_ENDL;
00200         HxEnvironment::instance()->flush();
00201         return HxImageRep();
00202     }
00203     if (i1.signature() != i2.signature()) {
00204         errorStream << "Source images differ in type" << STD_ENDL;
00205         HxEnvironment::instance()->flush();
00206         return HxImageRep();
00207     }
00208     if (i1.sizes() != i2.sizes()) {
00209         errorStream << "Source images differ in size" << STD_ENDL;
00210         HxEnvironment::instance()->flush();
00211         return HxImageRep();
00212     }
00213     HxImageSignature signature(i1.signature());
00214     HxSizes sizes(i1.sizes());
00215     
00216     if (signature.pixelDimensionality() != 1) {
00217         errorStream << "HxImageRep: images must have pixelDimensionality of 1"
00218                     << STD_ENDL;
00219         HxEnvironment::instance()->flush();
00220         return HxImageRep();
00221     }
00222     signature.setPixelDimensionality(2);
00223     HxImageData* imgData = construct(signature, sizes);
00224     if (imgData)
00225     {
00226         HxTagList tags;
00227         imgData->binaryPixOp(
00228             i1.pointee(), i2.pointee(), "vector2d", tags);
00229     }
00230     return HxImageRep(imgData);
00231 }

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.

00235 {
00236     STD_OSTREAM& errorStream = HxEnvironment::instance()->errorStream();
00237     if (!(i1 && i2 && i3)) {
00238         errorStream << "Source images may not be null" << STD_ENDL;
00239         HxEnvironment::instance()->flush();
00240         return HxImageRep();
00241     }
00242     if ((i1.signature() != i2.signature())
00243             || (i2.signature() != i3.signature())) {
00244         errorStream << "Source images differ in type" << STD_ENDL;
00245         HxEnvironment::instance()->flush();
00246         return HxImageRep();
00247     }
00248     if ((i1.sizes() != i2.sizes()) || (i2.sizes() != i3.sizes())) {
00249         errorStream << "Source images differ in size" << STD_ENDL;
00250         HxEnvironment::instance()->flush();
00251         return HxImageRep();
00252     }
00253     HxImageSignature signature(i1.signature());
00254     HxSizes sizes(i1.sizes());
00255     if (signature.pixelDimensionality() != 1) {
00256         errorStream << "HxImageRep: images must have pixelDimensionality of 1"
00257                     << STD_ENDL;
00258         HxEnvironment::instance()->flush();
00259         return HxImageRep();
00260     }
00261     signature.setPixelDimensionality(3);
00262     HxImageData* imgData = construct(signature, sizes);
00263     if (imgData)
00264     {
00265         HxTagList tags;
00266         HxImageData *pointees[3] = {i1.pointee(), i2.pointee(), i3.pointee()};
00267         imgData->multiPixOp(pointees, 3, "vector3d", tags);
00268     }
00269     return HxImageRep(imgData);
00270 }

HxImageRep HxImageFactory::fromFile HxString    fileName,
HxTagList   tags
 

New image read from file using HxImgFileIo lib.

00276 {
00277     HxString extName = HxSystem::instance().extName(fileName);
00278 
00279     HxImgFileReader* reader = HxImgFileIoTable::instance().getReader(extName);
00280 
00281     int imgNum = HxGetTag(tags, "setImage", 0);
00282 
00283     if (!reader)
00284     {
00285         HxEnvironment::instance()->errorStream()
00286             << "Unknown file type \"" << extName << "\"" << STD_ENDL;
00287         HxEnvironment::instance()->flush();
00288         return HxImageRep();
00289     }
00290 
00291     if (reader->openFile(fileName))
00292     {
00293         HxImageData* imgData = 0;
00294 
00295         bool imgIsSet = reader->setImage(imgNum);
00296         reader->getInfo(tags);
00297         if (imgIsSet)
00298         {
00299             HxPointZ begin(0, 0, 0);
00300             HxTagList tags;
00301             imgData = construct(
00302                         reader->getSignature(), reader->getImageSize());
00303             HxString inOutOp =
00304                 HxString("importPix<") + reader->getDataTypeString() + ">";
00305             while (reader->moreData())
00306             {
00307                 HxBoundingBox boundingBox(reader->getDataSize());
00308                 boundingBox = boundingBox.translate(reader->getDataBegin());
00309                 HxAddTag(tags, "boundingBox", boundingBox);
00310                 void* data = reader->getData();
00311                 if (data)
00312                     imgData->inout(
00313                         data, reader->getDataTypeString(), "importPix", tags); 
00314             }
00315         }
00316         else
00317         {
00318             HxEnvironment::instance()->errorStream()
00319                 << "" << reader->errorDescription() << STD_ENDL;
00320             HxEnvironment::instance()->flush();
00321         }
00322         reader->closeFile();
00323         return imgData ? HxImageRep(imgData) : HxImageRep();
00324     }
00325     else
00326     {
00327         HxEnvironment::instance()->errorStream()
00328             << "" << reader->errorDescription() << STD_ENDL;
00329         HxEnvironment::instance()->flush();
00330     }
00331 
00332     return HxImageRep();
00333 }

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

Write image to file using HxImgFileIo lib.

00338 {
00339     if (!img) return false;
00340 
00341     HxString extName = HxSystem::instance().extName(fileName);
00342 
00343     HxImgFileWriter* writer = HxImgFileIoTable::instance().getWriter(extName);
00344 
00345     if (!writer)
00346     {
00347         HxEnvironment::instance()->errorStream()
00348             << "Unknown file type \"" << extName << "\"" << STD_ENDL;
00349         HxEnvironment::instance()->flush();
00350         return false;
00351     }
00352 
00353     bool asRgb = HxGetTag(tags, "asRgb", true);
00354     HxAddTag(tags, "asRgb", asRgb);
00355 
00356     if (!(writer->openFile(fileName)            &&
00357         writer->setSignature(img.signature())   &&
00358         writer->setImageSize(img.sizes())       &&
00359         writer->setInfo(tags)))
00360     {
00361         HxEnvironment::instance()->errorStream()
00362             << "" << writer->errorDescription() << STD_ENDL;
00363         HxEnvironment::instance()->flush();
00364         return false;
00365     }
00366 
00367     HxPointZ begin(0, 0, 0);
00368     HxTagList opTags;
00369 
00370     while (writer->moreData())
00371     {
00372         HxString exportName = "exportPix<" + writer->getDataTypeString() + ">";
00373         HxBoundingBox boundingBox(writer->getDataSize());
00374         boundingBox = boundingBox.translate(writer->getDataBegin());
00375         HxAddTag(opTags, "boundingBox", boundingBox);
00376         void* data = writer->getData();
00377         if (data)
00378         {
00379             HxAddTag(opTags, "dataPtr", data);
00380             img.exportOp(exportName, opTags);
00381             writer->putData(data);
00382         }
00383     }
00384 
00385     writer->closeFile();
00386 
00387     return true;
00388 }

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

Write set of image to file using HxImgFileIo lib.

00457 {
00458     if (!imgs.size()) return false;
00459 
00460     HxString extName = HxSystem::instance().extName(fileName);
00461 
00462     HxImgFileWriter* writer = HxImgFileIoTable::instance().getWriter(extName);
00463 
00464     if (!writer)
00465     {
00466         HxEnvironment::instance()->errorStream()
00467             << "Unknown file type \"" << extName << "\"" << STD_ENDL;
00468         HxEnvironment::instance()->flush();
00469         return false;
00470     }
00471 
00472     bool asRgb = HxGetTag(tags, "asRgb", true);
00473     HxAddTag(tags, "asRgb", asRgb);
00474 
00475     HxImageList::const_iterator img = imgs.begin();
00476 
00477     if (!(writer->firstImage()                   &&
00478         writer->openFile(fileName)              &&
00479         writer->setSignature((*img).signature())   &&
00480         writer->setImageSize((*img).sizes())       &&
00481         writer->setInfo(tags)))
00482     {
00483         HxEnvironment::instance()->errorStream()
00484             << "" << writer->errorDescription() << STD_ENDL;
00485         HxEnvironment::instance()->flush();
00486         return false;
00487     }
00488 
00489     HxTagList opTags;
00490 
00491     while (img != imgs.end()) {
00492         while (writer->moreData())
00493         {
00494             HxString exportName = "exportPix<" + writer->getDataTypeString() + ">";
00495             HxBoundingBox boundingBox(writer->getDataSize());
00496             boundingBox = boundingBox.translate(writer->getDataBegin());
00497             HxAddTag(opTags, "boundingBox", boundingBox);
00498             void* data = writer->getData();
00499             if (data)
00500             {
00501                 HxAddTag(opTags, "dataPtr", data);
00502                 (*img).exportOp(exportName, opTags);
00503                 writer->putData(data);
00504             }
00505         }
00506         img++;
00507         if (img != imgs.end()) {
00508             writer->nextImage();
00509             if (!( writer->setSignature((*img).signature())   &&
00510                 writer->setImageSize((*img).sizes())       &&
00511                 writer->setInfo(tags)))
00512             {
00513                 HxEnvironment::instance()->errorStream()
00514                     << "" << writer->errorDescription() << STD_ENDL;
00515                 HxEnvironment::instance()->flush();
00516                 return false;
00517             }
00518         }
00519     }
00520 
00521     writer->closeFile();
00522 
00523     return true;
00524 }

HxImageList HxImageFactory::imagesFromFile HxString    fileName,
HxTagList   tags
 

Read set of image from file using HxImgFileIo lib.

00392 {
00393     HxString extName = HxSystem::instance().extName(fileName);
00394 
00395     HxImgFileReader* reader = HxImgFileIoTable::instance().getReader(extName);
00396 
00397     HxImageList imgs;
00398 
00399     if (!reader)
00400     {
00401         HxEnvironment::instance()->errorStream()
00402             << "Unknown file type \"" << extName << "\"" << STD_ENDL;
00403         HxEnvironment::instance()->flush();
00404         return imgs;
00405     }
00406 
00407     if (reader->openFile(fileName))
00408     {
00409         int imgNum;
00410         for (imgNum = 0; imgNum < reader->imageCount(); imgNum++) {
00411             bool imgIsSet = reader->setImage(imgNum);
00412             reader->getInfo(tags);
00413 
00414             if (imgIsSet)
00415             {
00416                 HxImageData* imgData = 0;
00417                 HxPointZ begin(0, 0, 0);
00418                 HxTagList tags;
00419                 imgData = construct(
00420                             reader->getSignature(), reader->getImageSize());
00421                 HxString inOutOp =
00422                     HxString("importPix<") + reader->getDataTypeString() + ">";
00423                 while (reader->moreData())
00424                 {
00425                     HxBoundingBox boundingBox(reader->getDataSize());
00426                     boundingBox = boundingBox.translate(reader->getDataBegin());
00427                     HxAddTag(tags, "boundingBox", boundingBox);
00428                     void* data = reader->getData();
00429                     if (data && imgData)
00430                         imgData->inout(
00431                             data, reader->getDataTypeString(), "importPix", tags); 
00432                 }
00433                 imgs += imgData ? HxImageRep(imgData) : HxImageRep();
00434             }
00435             else
00436             {
00437                 HxEnvironment::instance()->errorStream()
00438                     << "" << reader->errorDescription() << STD_ENDL;
00439                 HxEnvironment::instance()->flush();
00440             }
00441         }
00442         reader->closeFile();
00443     }
00444     else
00445     {
00446         HxEnvironment::instance()->errorStream()
00447             << "" << reader->errorDescription() << STD_ENDL;
00448         HxEnvironment::instance()->flush();
00449     }
00450 
00451     return imgs;
00452 }


The documentation for this class was generated from the following files:
Generated on Mon Jan 27 15:48:59 2003 for C++Reference by doxygen1.2.12 written by Dimitri van Heesch, © 1997-2001