Está en la página 1de 21

FUNCIONES DE MUESTREO EN PANTALLA LCD fx-9860G

INDICE 1. Bdisp Introduccin 2. Bdisp_AllClr_DD/VRAM/DDVRAM(void) 3. Bdisp_PutDisp_DD(void) 4. Bdisp_DrawLineVRAM(int x1, int y1, int x2, int y2) 5. Bdisp_ClearLineVRAM(int x1, int y1, int x2, int y2) 6. Bdisp_AreaClr_DD/VRAM/DDVRAM(const DISPBOX *pArea) 7. Bdisp_AreaReverseVRAM(int x1, int y1, int x2, int y2 ) 8. Bdisp_GetDisp_DD/VRAM(unsigned char *pData) 9. Bdisp_PutDispArea_DD(const DISPBOX *pArea) 10. Bdisp_SetPoint_DD/VRAM/DDVRAM(int x, int y, unsigned char point) 11. Bdisp_GetPoint_VRAM(int x, int y) 12. Bdisp_WriteGraph_DD/VRAM/DDVRAM(const DISPGRAPH *WriteGraph) 13. Bdisp_ReadArea_DD/VRAM(const DISPBOX *ReadData)

1. Bdisp Introduccin Las funciones Bdisp agrupan a casi todas las funciones graficas aplicadas a la pantalla LCD de la calculadora. Existen dos pantallas en la calculadora, con las que se puede trabajar. Estas son las pantallas: DD y VRAM. La pantalla DD es la pantalla fsica (LCD), que se ve. Es la pantalla de la calculadora. La pantalla VRAM es una pantalla virtual, a similitud de la RAM grafica en una computadora. En ambas pantallas se pueden realizar grficos. Para realizar dibujos, se recomienda que primero se grafique en la pantalla VRAM, para luego transferirlo a la pantalla DD. Esta operacin hace que el dibujo se despliegue mucho mas rpido en la pantalla fsica DD. Algunas funciones como Drawline slo puede realizarse en la pantalla VRAM. 1.1 Dimensiones de la Pantalla LCD La pantalla LCD de la calculadora, tiene dimensiones: 128x64 pixeles. 128 pixeles en el eje x 64 pixeles en el eje y. Este eje esta invertido hacia abajo, tal como se ve en la figura:

Las coordenadas de origen (0,0); estn en la esquina superior izquierda La mxima coordenada x esta a la derecha de la pantalla (127, y). La mxima coordenada y esta abajo de la pantalla (x, 63). Cuando se grafica en la pantalla, debe realizarse con precisin, para coincidir con el rango de 128x64 pixeles. Por lo tanto, se tiene un total de 128x64 = 8192 pixeles para graficar.

2. Bdisp_AllClr_DD/ Bdisp_AllClr_VRAM/ Bdisp_AllClr_DDVRAM Estas funciones estn declaradas en el archivo de encabezamiento fxlib.h. Estas funciones se utilizan para limpiar toda el rea de la pantalla DD y/o VRAM. A su vez estas funciones pueden desglosarse en: void Bdisp_AllClr_DD(void); void Bdisp_AllClr_VRAM(void); void Bdisp_AllClr_DDVRAM(void);

void Bdisp_AllClr_DD(void); Esta funcin se utiliza para limpiar toda el rea de la pantalla fsica DD.

void Bdisp_AllClr_VRAM(void); Esta funcin se utiliza para limpiar toda el rea de la pantalla virtual VRAM.

void Bdisp_AllClr_DDVRAM(void); Esta funcin se utiliza para limpiar simultneamente toda el rea de la pantalla virtual VRAM y de la pantalla fsica DD. 2.1 Ejemplo (Limpiando la pantalla DD al iniciar) #include "fxlib.h" int AddIn_main(int isAppli, unsigned short OptionNum) { unsigned int key; Bdisp_AllClr_DD(); while(1){ GetKey(&key); } return 1; } #pragma section _BR_Size

unsigned long BR_Size; #pragma section #pragma section _TOP int InitializeSystem(int isAppli, unsigned short OptionNum) { return INIT_ADDIN_APPLICATION(isAppli, OptionNum); } #pragma section

2.2 Ejemplo (Limpiando la pantalla VRAM) #include "fxlib.h" int AddIn_main(int isAppli, unsigned short OptionNum) { unsigned int key; PrintMini(0, 0,(unsigned char*)"Texto UNO", MINI_OVER); Sleep(3000); Bdisp_AllClr_DD(); Bdisp_PutDisp_DD(); Bdisp_AllClr_VRAM(); PrintMini(0, 0,(unsigned char*)"Texto DOS", MINI_OVER); Sleep(3000); Bdisp_AllClr_DD(); Bdisp_PutDisp_DD(); while(1){ GetKey(&key); } return 1; } #pragma section _BR_Size unsigned long BR_Size; #pragma section #pragma section _TOP int InitializeSystem(int isAppli, unsigned short OptionNum) { return INIT_ADDIN_APPLICATION(isAppli, OptionNum); } #pragma section

2.3 Ejemplo (Limpiando simultneamente la pantalla DD y/o VRAM) #include "fxlib.h"

int AddIn_main(int isAppli, unsigned short OptionNum) { unsigned int key; Bdisp_AllClr_DDVRAM(); while(1){ GetKey(&key); } return 1; } #pragma section _BR_Size unsigned long BR_Size; #pragma section #pragma section _TOP int InitializeSystem(int isAppli, unsigned short OptionNum) { return INIT_ADDIN_APPLICATION(isAppli, OptionNum); } #pragma section

3. Bdisp_PutDisp_DD(void) Esta funcin esta declarada en el archivo de encabezamiento fxlib.h. Esta funcin transfiere todo el grafico de la pantalla VRAM a la pantalla fsica DD, pxel por pxel. Se recomienda utilizar esta funcin antes que cualquier otra, debido a su velocidad. Es 700 veces ms veloz que cualquier otra funcin de transferencia de grficos hacia la pantalla DD.

3.1 Ejemplo #include "fxlib.h" int AddIn_main(int isAppli, unsigned short OptionNum) { unsigned int key; Bdisp_AllClr_DDVRAM(); PrintMini(0,0,(unsigned char*)"Desplegando en VRAM", MINI_OVER); PrintMini(0,7,(unsigned char*)"y luego transfiriendo", MINI_OVER); PrintMini(0,14,(unsigned char*)"a la pantalla DD",MINI_OVER); Bdisp_PutDisp_DD(); Sleep(3000); while(1){ GetKey(&key); } return 1; }

#pragma section _BR_Size unsigned long BR_Size; #pragma section #pragma section _TOP int InitializeSystem(int isAppli, unsigned short OptionNum) { return INIT_ADDIN_APPLICATION(isAppli, OptionNum); } #pragma section

4. Bdisp_DrawLineVRAM(int x1, int y1, int x2, int y2) Esta funcin esta declarada en el archivo de encabezamiento fxlib.h. Esta funcin dibuja una lnea en la pantalla virtual VRAM. Esta funcin posee 4 argumentos: x1, y1, x2, y y2, que corresponden a las coordenadas inicial y final de la lnea. Las coordenadas x1 y y1 corresponden al extremo inicial de la lnea. Las coordenadas x2 y y2 corresponden al extremo final de la lnea. Para tener una idea sobre como acta esta funcin, observar la figura:

Entre ambos puntos, la calculadora traza una lnea. Para transferir el trazado de la lnea, a la pantalla DD, se debe utilizar Bdisp_PutDisp_DD(void). En realidad, la calculadora enciende todos los pxeles comprendidos entre los puntos inicial y final de la lnea. El trazado de la lnea se realiza sobre el plano fsico de la pantalla LCD, con su eje y invertido, y NO en el plano comnmente visto en las escuelas, colegios y universidades.

4.1 Ejemplo (Trazando lneas sobre la pantalla LCD) #include "fxlib.h"

int AddIn_main(int isAppli, unsigned short OptionNum) { unsigned int key; Bdisp_AllClr_DDVRAM(); Bdisp_DrawLineVRAM(0, 0, 127, 0); Bdisp_DrawLineVRAM(127, 0, 127, 63); Bdisp_DrawLineVRAM(127, 63, 0, 63); Bdisp_DrawLineVRAM(0, 63, 0, 0); Bdisp_DrawLineVRAM(0, 0, 127, 64); Bdisp_DrawLineVRAM(127, 0, 0, 63); Bdisp_PutDisp_DD(); while(1){ GetKey(&key); } return 1; } #pragma section _BR_Size unsigned long BR_Size; #pragma section #pragma section _TOP int InitializeSystem(int isAppli, unsigned short OptionNum) { return INIT_ADDIN_APPLICATION(isAppli, OptionNum); } #pragma section

5. Bdisp_ClearLineVRAM(int x1, int y1, int x2, int y2) Esta funcin esta declarada en el archivo de encabezamiento fxlib.h. Esta funcin limpia una lnea en la pantalla virtual VRAM. Esta funcin posee 4 argumentos: x1, y1, x2, y y2, que corresponden a las coordenadas inicial y final de la lnea, segn se ve en la figura:

Las coordenadas x1 y y1 corresponden al extremo inicial de la lnea. Las coordenadas x2 y y2 corresponden al extremo final de la lnea.

Entre ambos puntos, la calculadora traza una lnea. Para transferir el trazado de la lnea, a la pantalla DD, se debe utilizar Bdisp_PutDisp_DD(). En realidad, la calculadora apaga todos los pxeles comprendidos entre los puntos inicial y final de la lnea. El trazado de la lnea se realiza sobre el plano fsico de la pantalla LCD, con su eje y invertido.

5.1 Ejemplo (Borrando lneas sobre la pantalla LCD) #include "fxlib.h" int AddIn_main(int isAppli, unsigned short OptionNum) { int y; unsigned int key; Bdisp_AllClr_DDVRAM(); for(y=0; y<=63; y++) { Bdisp_DrawLineVRAM(0, y, 127, y); }; Bdisp_PutDisp_DD(); Sleep(3000); Bdisp_ClearLineVRAM(0, 0, 127, 0); Bdisp_ClearLineVRAM(127, 0, 127, 63); Bdisp_ClearLineVRAM(127, 63, 0, 63); Bdisp_ClearLineVRAM(0, 63, 0, 0); Bdisp_ClearLineVRAM(0, 0, 127, 63); Bdisp_ClearLineVRAM(127, 0, 0, 63); Bdisp_AllClr_DD(); Bdisp_PutDisp_DD(); while(1){ GetKey(&key); } return 1; } #pragma section _BR_Size unsigned long BR_Size; #pragma section #pragma section _TOP int InitializeSystem(int isAppli, unsigned short OptionNum) { return INIT_ADDIN_APPLICATION(isAppli, OptionNum); } #pragma section

6. Bdisp_AreaClr_DD/VRAM/DDVRAM(const DISPBOX *pArea) Estas funciones estn declaradas en el archivo de encabezamiento fxlib.h. Estas funciones se utilizan para limpiar el rea especfica de un rectngulo contenido en la pantalla DD y/o VRAM. A su vez estas funciones pueden desglosarse en: void Bdisp_AreaClr_DD(const DISPBOX *pArea // Puntero a Estructura de Datos) void Bdisp_AreaClr_VRAM(const DISPBOX *pArea // Puntero a Estructura de Datos) void Bdisp_AreaClr_DDVRAM(const DISPBOX *pArea // Puntero a Estructura de Datos) pArea Es un puntero a la estructura DISPBOX. La estructura DISPBOX esta definida y declarada en el archivo de encabezamiento dispbios.h, segn el formato: typedef struct tag_DISPBOX { int left; // 0~127 int top; // 0~63 int right; // 0~127 int bottom; // 0~63 } DISPBOX La estructura DISPBOX define un rectngulo, por medio de las coordenadas de dos puntos: el superior-izquierdo y el inferior-derecha. Los lados del rectngulo se extienden a partir de estos dos puntos y son paralelo al eje x y el eje y. Para tener una idea sobre como acta esta funcin, observar la figura:

El apagado de los pixeles del rectngulo declarado aqu, solo se realiza a travs de este puntero. void Bdisp_AreaClr_DD(const DISPBOX *pArea // Puntero a Estructura de Datos) Esta funcin se utiliza para limpiar el rea especfica de un rectngulo contenido en la pantalla DD.

void Bdisp_AreaClr_VRAM(const DISPBOX *pArea // Puntero a Estructura de Datos) Esta funcin se utiliza para limpiar el rea especfica de un rectngulo contenido en la pantalla VRAM.

void Bdisp_AreaClr_DDVRAM(const DISPBOX *pArea // Puntero a Estructura de Datos) Esta funcin se utiliza para limpiar simultneamente el rea especfica de un rectngulo contenido en la pantalla DD y VRAM.

6.1 Ejemplo (Limpiando reas especificas de la pantalla LCD) #include "fxlib.h" int AddIn_main(int isAppli, unsigned short OptionNum) { int y; unsigned int key; DISPBOX Cuadro; Cuadro.left = 54; Cuadro.top = 22; Cuadro.right = 74; Cuadro.bottom = 42; Bdisp_AllClr_DDVRAM(); for(y=0; y<=63; y++) { Bdisp_DrawLineVRAM(0, y, 127, y); } Bdisp_PutDisp_DD(); Sleep(3000); Bdisp_AreaClr_DDVRAM(&Cuadro); while(1){ GetKey(&key); } return 1; } #pragma section _BR_Size unsigned long BR_Size; #pragma section

#pragma section _TOP int InitializeSystem(int isAppli, unsigned short OptionNum) { return INIT_ADDIN_APPLICATION(isAppli, OptionNum); } #pragma section

7. Bdisp_AreaReverseVRAM(int x1, int y1, int x2, int y2) Esta funcin esta declarada en el archivo de encabezamiento fxlib.h. Esta funcin revierte el estado (ENCENDIDO - APAGADO), de los pixeles de un rectngulo especifico contenido en la pantalla VRAM. Si un pxel esta Encendido, se revierte a Apagado y viceversa Esta funcin posee 4 argumentos: x1, y1, x2, y y2, que corresponden a las coordenadas de dos puntos: el superior-izquierdo y el inferior-derecha. Los lados del rectngulo se extienden a partir de estos dos puntos y son paralelo al eje x y el eje y. Para tener una idea sobre como acta esta funcin, observar la figura:

7.1 Ejemplo (Revirtiendo reas especificas de la pantalla VRAM) #include "fxlib.h" int AddIn_main(int isAppli, unsigned short OptionNum) { unsigned int key; Bdisp_AllClr_DDVRAM(); Bdisp_AreaReverseVRAM(0, 0, 127, 63); Bdisp_PutDisp_DD(); Sleep(3000); Bdisp_AllClr_DD(); Bdisp_AreaReverseVRAM(54, 22, 74, 42); Bdisp_PutDisp_DD(); while(1){ GetKey(&key); } return 1; } #pragma section _BR_Size unsigned long BR_Size; #pragma section #pragma section _TOP int InitializeSystem(int isAppli, unsigned short OptionNum) {

return INIT_ADDIN_APPLICATION(isAppli, OptionNum); } #pragma section

8. Bdisp_GetDisp_DD/VRAM(unsigned char *pData) Estas funciones estn declaradas en el archivo de encabezamiento fxlib.h. Esta funcin atrapa un grafico de la pantalla DD y/o VRAM, y la coloca en un vector o en una matriz lineal. A su vez estas funciones pueden desglosarse en: Bdisp_GetDisp_DD(unsigned char *pData) Bdisp_GetDisp_VRAM(unsigned char *pData) pData Es un puntero al vector o matriz lineal. El vector o la matriz lineal debe ser del tipo de variable: unsigned char, adems de tener un tamao de 1024 bytes. El tamao del vector o matriz lineal debe coincidir con el siguiente macro: #define IM_VRAM_SIZE 1024 (Declared in dispbios.h) El macro IM_VRAM_SIZE esta definido en el archivo de encabezamiento dispbios.h.

Bdisp_GetDisp_DD(unsigned char *pData) Esta funcin atrapa un grafico de la pantalla DD, y la coloca en un vector o en una matriz lineal de 1024 bytes de tamao y de tipo unsigned char.

Bdisp_GetDisp_VRAM(unsigned char *pData) Esta funcin atrapa un grafico de la pantalla VRAM, y la coloca en un vector o en una matriz lineal de 1024 bytes de tamao y de tipo unsigned char.

8.1 Ejemplo (Transfiriendo un rea especfica de la pantalla VRAM a un vector o matriz) #include "fxlib.h" int AddIn_main(int isAppli, unsigned short OptionNum) { unsigned int key; char VECTOR[1024]; Bdisp_AllClr_DDVRAM(); Bdisp_AreaReverseVRAM(0, 0, 127, 63); Bdisp_PutDisp_DD();

Sleep(3000); Bdisp_AllClr_DD(); Bdisp_AreaReverseVRAM(54, 22, 74, 42); Bdisp_PutDisp_DD(); Bdisp_GetDisp_DD(&VECTOR); while(1){ GetKey(&key); } return 1; } #pragma section _BR_Size unsigned long BR_Size; #pragma section #pragma section _TOP int InitializeSystem(int isAppli, unsigned short OptionNum) { return INIT_ADDIN_APPLICATION(isAppli, OptionNum); } #pragma section

9. Bdisp_PutDispArea_DD(const DISPBOX *pArea) Esta funcin esta declarada en el archivo de encabezamiento fxlib.h. Esta funcin transfiere el rea especfica de un rectngulo contenido en la pantalla VRAM hacia la pantalla DD. pArea Es un puntero a la estructura DISPBOX. La estructura DISPBOX esta definida y declarada en el archivo de encabezamiento dispbios.h, segn el formato: typedef struct tag_DISPBOX { int left; // 0~127 int top; // 0~63 int right; // 0~127 int bottom; // 0~63 } DISPBOX La estructura DISPBOX define un rectngulo, por medio de las coordenadas de dos puntos: el superior-izquierdo y el inferior-derecha. Los lados del rectngulo se extienden a partir de estos dos puntos y son paralelo al eje x y el eje y. Para tener una idea sobre como acta esta funcin, observar la figura:

9.1 Ejemplo (Transfiriendo un rea especfica de la pantalla VRAM a la pantalla DD) #include "fxlib.h" int AddIn_main(int isAppli, unsigned short OptionNum) { unsigned int key; DISPBOX Cuadro; Cuadro.left = 1; Cuadro.top = 1; Cuadro.right = 126; Cuadro.bottom = 62; Bdisp_AllClr_DDVRAM(); Bdisp_AreaReverseVRAM(0, 0, 127, 63); Bdisp_PutDisp_DD(); Bdisp_AreaReverseVRAM(0, 0, 127, 63); Sleep(3000); Bdisp_PutDispArea_DD(&Cuadro); while(1){ GetKey(&key); } return 1; } #pragma section _BR_Size unsigned long BR_Size; #pragma section

#pragma section _TOP int InitializeSystem(int isAppli, unsigned short OptionNum) { return INIT_ADDIN_APPLICATION(isAppli, OptionNum); } #pragma section

10. Bdisp_SetPoint_DD/VRAM/DDVRAM(int x, int y, unsigned char point) Estas funciones estn declaradas en el archivo de encabezamiento fxlib.h. Estas funciones ENCIENDEN o APAGAN un pxel en una posicin especfica de la pantalla DD y/o VRAM. A su vez estas funciones pueden desglosarse en: Bdisp_SetPoint_DD(int x, int y, unsigned char point) Bdisp_SetPoint_VRAM(int x, int y, unsigned char point) Bdisp_SetPoint_DDVRAM(int x, int y, unsigned char point) Si la variable point tiene el valor de 1, entonces el pxel es Encendido. Si la variable point tiene el valor de 0, entonces el pxel es Apagado. Bdisp_SetPoint_DD(int x, int y, unsigned char point) Esta funcin ENCIENDE o APAGA un pxel en una posicin especfica de la pantalla DD.

Bdisp_SetPoint_VRAM(int x, int y, unsigned char point) Esta funcin ENCIENDE o APAGA un pxel en una posicin especfica de la pantalla VRAM.

Bdisp_SetPoint_DDVRAM(int x, int y, unsigned char point) Esta funcin ENCIENDE o APAGA simultneamente un pxel en una posicin especfica de la pantalla DD y/o VRAM.

10.1 Ejemplo (Dibujando puntos especficos de la pantalla VRAM a la pantalla DD) #include "fxlib.h" int AddIn_main(int isAppli, unsigned short OptionNum) { unsigned int key; Bdisp_AllClr_DDVRAM(); Bdisp_SetPoint_DDVRAM(15, 36, 1);

Bdisp_SetPoint_DDVRAM(82, 48, 1); Bdisp_SetPoint_DDVRAM(43, 25, 1); Bdisp_SetPoint_DDVRAM(103, 51, 1); Sleep(3000); Bdisp_AllClr_DDVRAM(); Bdisp_AreaReverseVRAM(0,0, 127, 63); Bdisp_SetPoint_VRAM(15, 36, 0); Bdisp_SetPoint_VRAM(82, 48, 0); Bdisp_SetPoint_VRAM(43, 25, 0); Bdisp_SetPoint_VRAM(103, 51, 0); Bdisp_PutDisp_DD(); while(1){ GetKey(&key); } return 1; } #pragma section _BR_Size unsigned long BR_Size; #pragma section #pragma section _TOP int InitializeSystem(int isAppli, unsigned short OptionNum) { return INIT_ADDIN_APPLICATION(isAppli, OptionNum); } #pragma section

11. Bdisp_GetPoint_VRAM(int x, int y) Esta funcin esta declarada en el archivo de encabezamiento fxlib.h. Esta funcin verifica si un pixel de una posicin especifica de la pantalla VRAM esta en estado ENCENDIDO o APAGADO Esta funcin retorna el valor 1, cuando el pxel especifico esta ENCENDIDO, y el valor 0, cuando el pxel especifico esta APAGADO.

10.1 Ejemplo (Dibujando puntos especficos de la pantalla VRAM a la pantalla DD) #include "fxlib.h" int AddIn_main(int isAppli, unsigned short OptionNum) { int pixel; unsigned int key; Bdisp_AllClr_DDVRAM(); while(IsKeyDown(KEY_CTRL_EXIT)==0) { pixel = Bdisp_GetPoint_VRAM(64, 32); if(!pixel) { Bdisp_SetPoint_DDVRAM(64, 32, 1); } else { Bdisp_SetPoint_DDVRAM(64, 32, 0); }; Sleep(500); } while(1){ GetKey(&key); } return 1; } #pragma section _BR_Size unsigned long BR_Size; #pragma section #pragma section _TOP int InitializeSystem(int isAppli, unsigned short OptionNum) { return INIT_ADDIN_APPLICATION(isAppli, OptionNum); } #pragma section Nota: la funcion IsKeyDown de la Librera fx-9860G SDK, no es soportada por la nueva serie de calculadoras fx-9860GII(SD), GRAPH75(95), fx-9860G AU PLUS. Esta serie es la que lleva USB POWER GRAPHIC 2 en su carcasa. En lugar de la funcion IsKeyDown, por favor utilize GetKey Bkey_GetKeyWait. y la nueva funcin

12. Bdisp_WriteGraph_DD/VRAM/DDVRAM(const DISPGRAPH *WriteGraph) Estas funciones estn declaradas en el archivo de encabezamiento fxlib.h. Estas funciones copian una imagen desde un rectngulo definido (usualmente desde un Vector o Matriz Lineal), a la pantalla DD y/o VRAM.

Para realizar esta accin, estas funciones utilizan dos estructuras declaradas y definidas: GRAPHDATA y DISPGRAPH. A su vez estas funciones pueden desglosarse en: void Bdisp_WriteGraph_DD(const DISPGRAPH *WriteGraph // Puntero a Estructura de Datos) void Bdisp_WriteGraph_VRAM(const DISPGRAPH *WriteGraph // Puntero a Estructura de Datos) void Bdisp_WriteGraph_DDVRAM(const DISPGRAPH *WriteGraph // Puntero a Estructura de Datos)

WriteGraph Es un puntero a la estructura DISPGRAPH. La estructura DISPGRAPH esta definida y declarada en el archivo de encabezamiento dispbios.h, segn el formato: Typedef struct tag_ DISPGRAPH { int x; // coordenada x de la esquina superior izquierdo int y; // coordenada x de la esquina superior izquierdo. GRAPHDATA GraphData; // puntero a los datos del dibujo WRITEMODIFY WriteModify; // modificacin de escritura del dibujo, declarados en dispbios.h, segn la tabla: IMB_WRITEMODIFY_NORMAL Color Normal IMB_WRITEMODIFY_REVERSE Color Invertido IMB_WRITEMODIFY_MESH Especie de Gris Rustico WRITEKIND WriteKind; // Modo de escritura del dibujo, declarado en dispbios.h, segn la tabla: IMB_WRITEKIND_OVER IMB_WRITEKIND_OR IMB_WRITEKIND_AND IMB_WRITEKIND_XOR Sobre-escritura total OR*1 AND*1 XOR*1

Cuando se utiliza la funcin Bdisp_WriteGraph_DDVRAM, esta calcula las operaciones binarias OR/AND/XOR a partir de los datos del dibujo (vector) y los datos de la pantalla VRAM. } DISPGRAPH; La estructura DISPGRAPH contiene la informacin acerca de cmo y donde el dibujo es desplegado. Tambin contiene la direccin de memoria de los datos del dibujo. Es necesario, aqu, definir la estructura adicional GRAPHDATA:

Estructura GRAPHDATA La estructura GRAPHDATA esta definida y declarada en el archivo de encabezamiento dispbios.h, segn el formato: Typedef struct tag_GRAPHDATA { int width; // base del dibujo int height; // altura del dibujo unsigned char *pBitmap; // puntero a un vector del dibujo } GRAPHDATA; Esta estructura contiene la informacin de los datos del dibujo como ser: base del dibujo, altura del dibujo, y direccin de memoria de los datos del dibujo, accesado a travs de un puntero unsigned char *. void Bdisp_WriteGraph_DD(const DISPGRAPH *WriteGraph // Puntero a Estructura de Datos) Esta funcin copia una imagen desde un rectngulo definido (usualmente desde un Vector o Matriz Lineal), y la transfiere a la pantalla DD.

void Bdisp_WriteGraph_VRAM(const DISPGRAPH *WriteGraph // Puntero a Estructura de Datos) Esta funcin copia una imagen desde un rectngulo definido (usualmente desde un Vector o Matriz Lineal), y la transfiere a la pantalla VRAM.

void Bdisp_WriteGraph_DDVRAM(const DISPGRAPH *WriteGraph // Puntero a Estructura de Datos) Esta funcin copia una imagen desde un rectngulo definido (usualmente desde un Vector o Matriz Lineal), y la transfiere simultneamente a la pantalla DD y VRAM.

12.1 Ejemplo (Copiando una imagen especfica a la pantalla VRAM y/o DD) #include "fxlib.h" #include "dispbios.h" void Dibujar_Imagen(unsigned char IMAGEN[]) { GRAPHDATA DATOS_Dibujo; DISPGRAPH INFO_Dibujo; DATOS_Dibujo.width = 128; DATOS_Dibujo.height = 64; DATOS_Dibujo.pBitmap = IMAGEN; INFO_Dibujo.x = 0; INFO_Dibujo.y = 0; INFO_Dibujo.GraphData = DATOS_Dibujo;

INFO_Dibujo.WriteModify = IMB_WRITEMODIFY_NORMAL; INFO_Dibujo.WriteKind = IMB_WRITEKIND_OVER; Bdisp_WriteGraph_DDVRAM(&INFO_Dibujo); } int AddIn_main(int isAppli, unsigned short OptionNum) { unsigned int key; char IMAGEN[1024]; Bdisp_AllClr_DDVRAM(); Bdisp_DrawLineVRAM(0, 0, 127, 0); Bdisp_DrawLineVRAM(127, 0, 127, 63); Bdisp_DrawLineVRAM(127, 63, 0, 63); Bdisp_DrawLineVRAM(0, 63, 0, 0); Bdisp_DrawLineVRAM(0, 0, 127, 63); Bdisp_DrawLineVRAM(127, 0, 0, 63); Bdisp_GetDisp_VRAM(IMAGEN); Bdisp_AllClr_VRAM(); Sleep(3000); Dibujar_Imagen (IMAGEN); while(1){ GetKey(&key); } return 1; } #pragma section _BR_Size unsigned long BR_Size; #pragma section #pragma section _TOP int InitializeSystem(int isAppli, unsigned short OptionNum) { return INIT_ADDIN_APPLICATION(isAppli, OptionNum); } #pragma section

13. Bdisp_ReadArea_DD/VRAM(const DISPBOX *ReadArea, unsigned char *ReadDataData) Estas funciones estn declaradas en el archivo de encabezamiento fxlib.h. Estas funciones copian una imagen desde un rectngulo definido de la pantalla DD y/o VRAM, y lo transfieren a un Vector o Matriz lineal. El rectngulo as definido debe ser siempre menor al tamao total de la pantalla LCD Para realizar esta accin, estas funciones utilizan la estructura DISPBOX.

A su vez estas funciones pueden desglosarse en: Bdisp_ReadArea_DD(const DISPBOX *ReadArea, unsigned char *ReadData) Bdisp_ReadArea_VRAM(const DISPBOX *ReadArea, unsigned char *ReadData)

ReadArea Es un puntero a la estructura DISPBOX. La estructura DISPBOX esta definida y declarada en el archivo de encabezamiento dispbios.h, segn el formato: typedef struct tag_DISPBOX { int left; // 0~127 int top; // 0~63 int right; // 0~127 int bottom; // 0~63 } DISPBOX La estructura DISPBOX define un rectngulo, por medio de las coordenadas de dos puntos: el superior-izquierdo y el inferior-derecha. Los lados del rectngulo se extienden a partir de estos dos puntos y son paralelo al eje x y el eje y. Para tener una idea sobre como acta esta funcin, observar la figura:

ReadData Es un puntero al vector o matriz lineal de 1024 bytes de tamao y de tipo unsigned char. Es el destino de la imagen que ser guardada.

13.1 Ejemplo (Copiando una imagen especfica a la pantalla VRAM y/o DD) #include "fxlib.h" #include "dispbios.h" void Dibujar_Imagen(unsigned char IMAGEN[]) { GRAPHDATA DATOS_Dibujo; DISPGRAPH INFO_Dibujo; DATOS_Dibujo.width = 20;

DATOS_Dibujo.height = 20; DATOS_Dibujo.pBitmap = IMAGEN; INFO_Dibujo.x = 54; INFO_Dibujo.y = 22; INFO_Dibujo.GraphData = DATOS_Dibujo; INFO_Dibujo.WriteModify = IMB_WRITEMODIFY_NORMAL; INFO_Dibujo.WriteKind = IMB_WRITEKIND_OVER; Bdisp_WriteGraph_DDVRAM(&INFO_Dibujo); } int AddIn_main(int isAppli, unsigned short OptionNum) { unsigned int key; char IMAGEN[1024]; DISPBOX Cuadro; Cuadro.left = 54; Cuadro.top = 22; Cuadro.right = 74; Cuadro.bottom = 42; Bdisp_AllClr_DDVRAM(); Bdisp_DrawLineVRAM(0, 0, 127, 0); Bdisp_DrawLineVRAM(127, 0, 127, 63); Bdisp_DrawLineVRAM(127, 63, 0, 63); Bdisp_DrawLineVRAM(0, 63, 0, 0); Bdisp_DrawLineVRAM(0, 0, 127, 63); Bdisp_DrawLineVRAM(127, 0, 0, 63); Bdisp_ReadArea_VRAM(&Cuadro, & IMAGEN); Bdisp_AllClr_VRAM(); Sleep(3000); Dibujar_Imagen (IMAGEN); while(1){ GetKey(&key); } return 1; } #pragma section _BR_Size unsigned long BR_Size; #pragma section #pragma section _TOP int InitializeSystem(int isAppli, unsigned short OptionNum) { return INIT_ADDIN_APPLICATION(isAppli, OptionNum); } #pragma section

También podría gustarte