Figura 5.1.1
Clases
bicotiImage
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
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 * )
bicotiOperatorUnaryFacade<
PixelType > * GetOperatorUnary( )
void
DestroyOperatorUnary(
)
bicotiOperatorMultipleFacade<
PixelType > * GetOperatorMultiple( )
void
DestroyOperatorMultiple(
)
bicotiImageIterator<
PixelType > * CreateIterator( )
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.
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.
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.
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.
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.
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.
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.
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;
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.