Clases
bicotiFrame
bicotiFrame2D
bicotiFrame3D
bicotiFrame2DInternal
bicotiFrame2DExternal
bicotiFrame3DInternal
bicotiFrame3DExternal
Templates Clases
PixelType
class bicotiFrame3DExternal < class PixelType >
bicotiFrame3DExternal
(
bicotiMatrix3D< PixelType > * , int )
bicotiFrame3DExternal
(
const
bicotiFrame3DExternal< PixelType > & )
void
operator = ( const bicotiFrame3DExternal< PixelType
> & )
PixelType&
operator ( int , int )
virtual
void First (
)
virtual
void Next (
)
PixelType&
CurrentPixel ( )
bool
IsDone ( )
int
GetFrameSize
(
)
void
Locate
(
int , int )
Es el constructor
de la clase , al que hay que pasarle como parámetros un puntero
a una estructura
externa ,
bicotiMatrix3D y el tamaño del frame.
La estructura
externa es esencialmente una matríz 3D de pixeles. Ver bicotiMatrix
para más detalles.
Una matríz 2D 8 x 7 x 3 de enteros, llena de ceros, podría construirse de la siguiente forma :
bicotiMatrix3D< int > * ptr_matrix;
ptr_matrix = new bicotiMatrix2D< int >( 0 , 8 , 7 , 3 );
Luego podríamos crear un frame 3D 3 x 3 x 3 que leyera los datos de la matríz :
bicotiFrame3DExternal< int > frame ( ptr_matrix , 3 );
Este tipo de frames
no crea una copia interna para los pixeles, simplemente los lee de la matríz,
por lo tanto, cualquier
modificación en esta se reflejaría automáticamente
en el frame. Para liberar
la memoria hay que
destruir la matríz, el destructor del frame no lo hace.
Dado que la matríz
puede ser más grande que el frame, es importante definir como se
ubica al
frame sobre la matríz.
Inmediatamente después
de creado, el elemento de índice ( 0 , 0 , 0 ) del frame coincide
con el
elemento de índice
( 0 , 0 , 0 ) de la matríz , como se indica en la figura.
Obs : El frame se puede mover sobre la matríz con la función Locate.
Constructor
de copia.
Puedo definir
:
bicotiFrame3DExternal< int > frame( ptr_matrix , 3 );
y luego usar el constructor de copia, para crear un nuevo frame :
bicotiFrame3DInternal< int > frame_cpy( frame );
Obs : No se hace una copia de la matríz, simplemente se copia el puntero.
Operador de
Asignación, hace una copia sin crear un nuevo objeto. Si las dimensiones
son
diferentes
las ajusta a las del Frame fuente ( el que paso como parámetro ).
Es decir ,
si defino :
bicotiFrame3DExternal< int > frame_a( ptr_matrix_a , 3 );
bicotiFrame3DExternal< int > frame_b( ptr_matrix_b , 5 );
frame_a
es 3 x 3 x 3 y lee los pixeles de matrix_a , mientras que frame_b
es 5 x 5 x 5 y
lee los datos
de matrix_b. Si hago :
frame_b = frame_a ;
frame_b pasa a ser una copia de frame_a , 3 x 3 x 3 , tomando los datos de matrix_b.
Esta función
se define virtual en bicotiFrame3D y se implementa en las clases derivadas.
Ver operator(
) de bicotiFrame3D .
Esta función
se define virtual en bicotiFrame y se implementa en las clases derivadas.
Ver First(
) de bicotiFrame .
Esta función
se define virtual en bicotiFrame y se implementa en las clases derivadas.
Ver Next(
) de bicotiFrame .
Esta función
se hereda de bicotiFrame.
Ver CurrentPixel(
) de bicotiFrame .
Esta función
se hereda de bicotiFrame.
Ver IsDone(
) de bicotiFrame .
Esta función
se hereda de bicotiFrame.
Ver GetFrameSize(
) de bicotiFrame .
Esta función
permite mover al frame sobre la matríz.
Coloca el
extremo superior izquierdo del frame, el de índice ( 0 , 0 , 0 )
, sobre el pixel
de índices
( x_0 , x_1 , x_2 ) de la matríz.
Por ejemplo si hago :
frame.Locate( 3 , 1 , 0 );
El frame quedaría ubicado como se muestra en la figura.
Obs
: Si los índices son incorrectos, la función tirará
una exepción.
Ver "Exepciones" para más
detalle.