Horus Doc || C++ Reference || Class Overview   Pixels   Images   Detector   Geometry   Registry || Doxygen's quick Index  

HxMul.h File Reference

More...

#include "HxImageRep.h"

Go to the source code of this file.

Functions

HxImageRep L_HXIMAGEREP HxMul (HxImageRep im1, HxImageRep im2)
 Multiplication. More...


Detailed Description


Function Documentation

HxImageRep L_HXIMAGEREP HxMul HxImageRep    im1,
HxImageRep    im2
 

Multiplication.

The function performs multiplication (see Pixels) on all pixels in the input images via a binary pixel operation (see Images).

Implementation specifics : The pixel functor : HxBpoMul. The image functor instantiator : HxInstantiatorMul.

00016 {
00017     HxString fname("HxMul");
00018 
00019     if (im1.isNull())
00020     {
00021         HxGlobalError::instance()->reportError(fname, im1.name(), "null image", HxGlobalError::HX_GE_INVALID);
00022         return HxImageRep();
00023     }
00024     if (im2.isNull())
00025     {
00026         HxGlobalError::instance()->reportError(fname, im2.name(), "null image", HxGlobalError::HX_GE_INVALID);
00027         return HxImageRep();
00028     }
00029 
00030     if (im1.dimensionality() != im2.dimensionality())
00031     {
00032         HxGlobalError::instance()->reportError(fname, "unequal image dimensionalities", HxGlobalError::HX_GE_UNEQUAL_IMAGES);
00033         return HxImageRep();
00034     }
00035     if ((im1.pixelDimensionality() != im2.pixelDimensionality()) &&
00036         (im1.pixelDimensionality() != 1) &&
00037         (im2.pixelDimensionality() != 1))
00038     {
00039         HxGlobalError::instance()->reportError(fname, "unequal pixel dimensionalities", HxGlobalError::HX_GE_UNEQUAL_IMAGES);
00040         return HxImageRep();
00041     }
00042 
00043     if (im1.sizes().x() != im2.sizes().x())
00044     {
00045         HxGlobalError::instance()->reportError(fname, "unequal image widths", HxGlobalError::HX_GE_UNEQUAL_IMAGES);
00046         return HxImageRep();
00047     }
00048     if (im1.sizes().y() != im2.sizes().y())
00049     {
00050         HxGlobalError::instance()->reportError(fname, "unequal image heights", HxGlobalError::HX_GE_UNEQUAL_IMAGES);
00051         return HxImageRep();
00052     }
00053     if (im1.dimensionality() > 2)
00054     {
00055         if (im1.sizes().z() != im2.sizes().z())
00056         {
00057             HxGlobalError::instance()->reportError(fname, "unequal image depths", HxGlobalError::HX_GE_UNEQUAL_IMAGES);
00058             return HxImageRep();
00059         }
00060     }
00061 
00062     // in case of byte, unsigned: generate warnings in case of potentially dangerous
00063     // situations.
00064     // Check if image is byte.
00065     if (((im1.signature().pixelType() == INT_VALUE) && 
00066          (im1.signature().pixelPrecision() == 8)) ||
00067         ((im2.signature().pixelType() == INT_VALUE) && 
00068          (im2.signature().pixelPrecision() == 8)))
00069     {
00070         if ((im1.pixelDimensionality() == 1) && (im1.pixelDimensionality() == 1))
00071         {
00072             if ((HxPixMax(im1).HxScalarIntValue() * 
00073                  HxPixMax(im2).HxScalarIntValue()) > HxScalarInt(255))
00074             {
00075                 HxGlobalError::instance()->reportWarning(fname, 
00076                     im1.name()+HxString(" ")+im2.name(), 
00077                     "possible overflow due to byte precision", 
00078                     HxGlobalError::HX_GW_OVERFLOW);
00079             }
00080         }
00081         else if ((HxPixMax(HxUnaryMax(im1)).HxScalarIntValue() * 
00082                   HxPixMax(HxUnaryMax(im2)).HxScalarIntValue()) > HxScalarInt(255))
00083         {
00084                 HxGlobalError::instance()->reportWarning(fname, 
00085                     im1.name()+HxString(" ")+im2.name(), 
00086                     "possible overflow due to byte precision", 
00087                     HxGlobalError::HX_GW_OVERFLOW);
00088         }
00089     } 
00090 
00091     return im1.binaryPixOp(im2, "mul");
00092 }


Generated on Tue Feb 3 14:18:49 2004 for C++Reference by doxygen1.2.12 written by Dimitri van Heesch, © 1997-2001