bicotiFrame2DExternal

     Clases

bicotiFrame
bicotiFrame2D
bicotiFrame3D
bicotiFrame2DInternal
bicotiFrame2DExternal
bicotiFrame3DInternal
bicotiFrame3DExternal

     Templates Clases

PixelType


class bicotiFrame2DExternal < class PixelType >



 Public Methods

bicotiFrame2DExternal ( bicotiMatrix2D< PixelType > * , int )
bicotiFrame2DExternal ( const bicotiFrame2DExternal< PixelType > & )
void operator = ( const bicotiFrame2DExternal< PixelType >  & )
PixelType& operator ( int , int )
virtual void First (  )
virtual void Next (  )
PixelType& CurrentPixel (  )
bool IsDone (  )
int GetFrameSize (  )
void Locate ( int , int )



bicotiFrame2DExternal ( bicotiMatrix2D< PixelType > * ptr_matrix , int frame_size )

        Es el constructor de la clase , al que hay que pasarle como parámetros un puntero a una estructura
        externa , bicotiMatrix2D y el tamaño del frame.
        La estructura externa es esencialmente una matríz 2D de pixeles. Ver bicotiMatrix para más detalles.

        Una matríz 2D  8 x 7 de enteros, llena de ceros, podría construirse de la siguiente forma :

                 bicotiMatrix2D< int > *  ptr_matrix;
                 ptr_matrix = new bicotiMatrix2D< int >( 0 , 8 , 7 );

        Luego podríamos crear un frame 2D 3 x 3 que leyera los datos de la matríz :

                 bicotiFrame2DExternal< 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 ) del frame coincide con el
       elemento de índice ( 0 , 0 ) de la matríz , como se indica en la figura.

        En el ejemplo de la figura, sería por ejemplo :
                                                                             frame( 0 , 0 ) = 0
                                                                             frame( 1 , 1 ) = 4
                                                                             frame( 2 , 2 ) = 1

        Obs : El frame se puede mover sobre la matríz con la función Locate.



bicotiFrame2DExternal ( constbicotiFrame2DExternal< PixelType > & frame_src )

        Constructor de copia.
        Puedo definir :

                 bicotiFrame2DExternal< int > frame( ptr_matrix , 3 );

        y luego usar el constructor de copia, para crear un nuevo frame :

                 bicotiFrame2DInternal< int > frame_cpy( frame );

        Obs : No se hace una copia de la matríz, simplemente se copia el puntero.



void operator = ( const bicotiFrame2DInternal< PixelType > &  frame_src )

        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 :

                 bicotiFrame2DExternal< int > frame_a( ptr_matrix_a , 3 );
                 bicotiFrame2DExternal< int > frame_b( ptr_matrix_b , 5 );

         frame_a es 3 x 3 y lee los pixeles de matrix_a , mientras que frame_b es 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 , tomando los datos de matrix_b.



void operator( ) ( int index_0 , int index_1 )

        Esta función se define virtual en bicotiFrame2D y se implementa en las clases derivadas.
        Ver operator( ) de bicotiFrame2D .



void First ( )

        Esta función se define virtual en bicotiFrame y se implementa en las clases derivadas.
        Ver First( ) de bicotiFrame .



void Next ( )

        Esta función se define virtual en bicotiFrame y se implementa en las clases derivadas.
        Ver Next( ) de bicotiFrame .



PixelType & CurrentPixel ( )

        Esta función se hereda de bicotiFrame.
        Ver CurrentPixel( ) de bicotiFrame .



bool IsDone ( )

        Esta función se hereda de bicotiFrame.
        Ver IsDone( ) de bicotiFrame .



int GetFrameSize ( )

        Esta función se hereda de bicotiFrame.
        Ver GetFrameSize( ) de bicotiFrame .



void Locate ( int x_0 , int x_1 )

        Esta función permite mover al frame sobre la matríz.
        Coloca el extremo superior izquierdo del frame, el de índice ( 0 , 0 ) , sobre el pixel
        de índices ( x_0 , x_1 ) de la matríz.

        Por ejemplo si hago :

                        frame.Locate( 2 , 3 );

        El frame quedaría ubicado como se muestra en la figura.

            por lo que :
                                frame( 0 , 0 ) = 5
                                frame( 1 , 1 ) = 2
                                frame( 2 , 2 ) = 5

            Obs :  Si los índices son incorrectos, la función tirará una exepción.
                      Ver "Exepciones" para más detalle.