bicotiImage


Figura 5.1.1


 


     Clases

bicotiImage

bicotiImage2D
bicotiImage3D

bicotiImage2DSingle
bicotiImage2DVectorial
bicotiImage3DSingle
bicotiImage3DVectorial

bicotiImage2DArrayChar
bicotiImage2DArrayInt
bicotiImage2DArrayFloat
bicotiImage2DArrayDouble

bicotiImage2DSparseChar
bicotiImage2DSparseInt
bicotiImage2DSparseFloat
bicotiImage2DSparseDouble

bicotiImage2DArrayRGBChar
bicotiImage2DArrayRGBFloat

bicotiImage2DSparseRGBChar
bicotiImage2DSparseRGBFloat

bicotiImage3DArrayChar
bicotiImage3DArrayFloat

bicotiImage3DLinearChar
bicotiImage3DLinearFloat

bicotiImage3DArrayRGBChar
bicotiImage3DArrayRGBFloat

bicotiImage3DLinearRGBChar
bicotiImage3DLinearRGBFloat
 

     Templates Clases

ImageType
PixelType


class bicotiImage < class ImageType, class PixelType >



Figura 5.1.2



 Public Types

  typedef  PixelType  Pixel
  typedef  ImageType  Implementation
  typedef  bicotiImageIterator< PixelType > Iterator
  typedef  bicotiOperatorUnaryFacade< PixelType >  OperatorUnary
  typedef  bicotiOperatorMultipleFacade< PixelType >  OperatorMultiple

 Public Methods

ImageType * GetImplementation( )
void SetImplementation ( ImageType * )

void DestroyImplementation( )

bicotiOperatorUnaryFacade< PixelType > * GetOperatorUnary( )
void DestroyOperatorUnary( )

bicotiOperatorMultipleFacade< PixelType > * GetOperatorMultiple( )
void DestroyOperatorMultiple( )

bicotiImageIterator< PixelType > * CreateIterator( )

void DestroyDexel( )



ImageType * GetImplementation( )

    Devuelve un puntero a la implementación.

    Por ejemplo si creo :

        bicotiImage2DArrayChar  imagen;

    Puedo obtener un puntero a la implementación haciendo :

        bicotiImage2DArrayChar :: Implementation *  ptr_ima;
        ptr_ima = imagen.GetImplementaion( );

    Obs : Como declaramos el tipo del puntero a través de la clase, no es necesario instanciar ningún
             template.



void SetImplementation ( ImageType * ptr_ima )

    Permite setear la implementación de la imagen. Le paso un puntero ( ptr_ima ) a la nueva implementación.
    Hay que observar que los tipos deben ser compatibles.
    Por ejemplo si tengo una imagen 2D Array de enteros.

        bicotiImage2DArrayImagen  imagen;

    Puedo Crear :

        bicotiImageImplementation2DArray< int >  ptr_ima;
        ptr_ima = new bicotiImageImplementation2DArray< int >(0, 10, 10);

    y luego :

        imagen.SetImplementation( ptr_ima );

    La referencia que tenía la imagen a su implementación se pierde si hago esto, por lo que es conveniente borrarla primero con la función DestroyImplementation.



void DestroyImplementation( )

    Libera la memoria ocupada por la implementación de la imagen.
    Es decir que hacer :

        imagen.DestroyImplementation( );

    es lo mismo que :

        delete ( imagen.GetImplementation( ) );

    Aunque lo primero es más claro.



bicotiOperatorUnaryFacade< PixelType > * GetOperatorUnary( )

    Devuelve un puntero a la fachada de Operator Unary.

    Por ejemplo si creo :

        bicotiImage2DArrayFloat  imagen;

    Puedo obtener un puntero a la fachada de Operator Unary haciendo :

        bicotiImage2DArrayChar :: OperatorUnary *  ptr_oper;
        ptr_oper = imagen.GetOperatorUnary( );

    Con este puntero puedo acceder a todas las funciones de la fachada de Operator Unary.
    Ver Fachada de Operator Unary.

    Obs : Como declaramos el tipo del puntero a través de la clase, no es necesario instanciar ningún
             template.

    Obs : Para tener un puntero a un objeto creado y no un puntero a NULL que pueden traer
             problemas, primero hay que crear dicha fachada con la función BuildOperatorUnary o
             CreateOperatorUnary, ver clases derivadas.



void DestroyOperatorUnary( )

        La fachada de una imagen tiene un puntero a una fachada de OperatorUnary. Este puntero puede estar apuntando a una fachada concreta cuando se ha creado con la función BuldOperatorUnary o a NULL si no se ha creado aún la fachada.
Esta función libera la memoria ocupada por dicho objeto, si se ha creado.

    Es decir que hacer :

        imagen.DestroyOperatorUnary( );

    es lo mismo que :

        delete ( imagen.GetOperatorUnary( ) );

    Si el puntero apunta a NULL la función tira a una exepción.



bicotiOperatorMultipleFacade< PixelType > * GetOperatorMultiple( )

    Devuelve un puntero a la fachada de Operator Multiple.

    Por ejemplo si creo :

        bicotiImage3DArrayChar  imagen;

    Puedo obtener un puntero a la fachada de Operator Multiple haciendo :

        bicotiImage3DArrayChar :: OperatorMultiple *  ptr_oper_mul;
        ptr_oper_mul = imagen.GetOperatorUnary( );

    Con este puntero puedo acceder a todas las funciones de la fachada de Operator Multiple.
    Ver Fachada de Operator Multiple.

    Obs : Como declaramos el tipo del puntero a través de la clase, no es necesario instanciar ningún
             template.

    Obs : Para tener un puntero a un objeto creado y no un puntero a NULL que pueden traer
             problemas, primero hay que crear dicha fachada con la función BuildOperatorMultiple o
             CreateOperatorMultiple, ver clases derivadas.



void DestroyOperatorMultiple( )

        La fachada de una imagen tiene un puntero a una fachada de OperatorMultiple. Este puntero puede estar apuntando a una fachada concreta cuando se ha creado con la función BuldOperatorMultiple o a NULL si no se ha creado aún la fachada.
Esta función libera la memoria ocupada por dicho objeto, si se ha creado.

    Es decir que hacer :

        imagen.DestroyOperatorMultiple( );

    es lo mismo que :

        delete ( imagen.GetOperatorMultiple( ) );

    Si el puntero apunta a NULL la función tira a una exepción.



bicotiImageIterator< PixelType > * CreateIterator( )

    Crea un iterador para la implementación de la imagen y devuelve un puntero al mismo.

La forma de obtener un iterador a la implementación no relacionado a la fachada de la imagen es hacer :

        bicotiImage3DArrayChar  imagen;

        bicotiImage3DArrayChar :: Iterator * ptr_iterator;
        ptr_iterator = imagen.CreateIterator();

Usando el tipo declarado en la clase, no es necesario instanciar templates. Con el puntero al iterador puedo acceder a todas sus funciones.

Obs : Es el usuario el que debe liberar la memoria reservada para este puntero, ya que luego de creado, la fachada pierde toda referencia al iterador.
Cuando ya no se use el iterador hay que hacer :

        delete ptr_iterator;



void DestroyDexel( )

        La fachada de una imagen tiene un puntero a una fachada de Dexel. Este puntero puede estar apuntando a una fachada concreta cuando se ha creado con la función BuldDexel o a NULL si no se ha creado aún la fachada.
Esta función libera la memoria ocupada por dicho objeto, si se ha creado.

    Es decir que hacer :

        imagen.DestroyDexel( );

    es lo mismo que :

        delete ( imagen.GetDexel( ) );

    Si el puntero apunta a NULL la función tira a una exepción.