★ CODING ★ AMSTRAD SEMANAL ★ AHORRAR MEMORIA EN GRÁFICOS II ★![]() |
| Ahorrar memoria en gráficos II |
Siguiendo con el tema de cómo incluir el mayor número posible de gráficos en nuestros programas, en esta ocasión presentamos una rutina con la que se consigue ahorrar la mitad de memoria en cada uno de ellos. Está especialmente indicada para aquellas imágenes que ocupen la mayor parte de la pantalla. En algún capítulo anterior ya se ha abordado este problema, al cual se le han dado algunas posibles soluciones, hoy intentaremos dar otra salida a este gran inconveniente que en algunos casos nos obliga a rechazar gráficos verdaderamente bonitos debido a su gran longitud. Con el método que comentaremos a continuación, estaremos en condiciones de ahorrar la mitad de la memoria que ocupe un gráfico, en cualquiera de los modos de pantalla en que nos permite trabajar nuestro Amstrad. Las ventajas de la aplicación de esta rutina son verdaderamente asombrosas, ahora bien, esto no se consigue por arte de magia, y, por tanto, deberá existir algún inconveniente. El método utilizado para el ahorro de memoria, consiste en aumentar el tamaño del gráfico por dos, es decir, igual que si lo viéramos a través de una lupa, con lo que, obviamente, se pierde algo de resolución gráfica. Como ya hemos dicho anteriormente, esta pérdida de resolución puede resultar mínima, si se aplica a figuras relativamente grandes, ya que en ellas queda mucho más disimulada la pérdida de resolución. El mayor problema con los gráficos es la memoria que ocupan. Por tanto, aconsejaríamos que este método se utilizara únicamente para gráficos que estén destinados a ocupar gran parte de la pantalla, aunque se puede aplicar a figuras de dimensiones más reducidas con resultados verdaderamente muy buenos. La utilización de esta rutina, es especialmente recomendada para aplicarla en aquellos gráficos que deban ocupar gran parte de la pantalla, ya que se conseguirá rellenar gran parte de la misma con una escasa ocupación de memoria, con lo que se podrán obtener pantallas más vistosas al estar ocupadas la mayor parte de ellas por gráficos. Vamos a explicar a continuación cómo funciona cada una de las rutinas para los diferentes modos de pantalla. Esto se conseguirá chequeando los bits, y en caso de que estén a uno, duplicarlos con unos, y en caso de estar a ceros duplicarlos con ceros. Dicha operación se realizará para cada línea horizontal. A continuación se duplicarán línea por línea, con lo que se obtendrá la magnificación en sentido vertical. La rutina que se encarga de realizar este trabajo, para el modo 1 de pantalla, es similar a la anterior, pero en este caso deberemos tener en cuenta que los bits llevan, en este caso, información del color con que se va a imprimir el gráfico, por lo que se deberá tratar de una forma especial. Así pues, deberemos tener en cuenta cada una de las parejas de bits que se encuentran en un byte. En este caso, igual que en el anterior, tomaremos en primer lugar cuatro bits originales con lo que se logrará un byte ampliado y luego los otros cuatro. Ahora bien, los bits que deberemos tomar en primer lugar serán aquellos que lleven la información de los dos primeros pixels, que serán los bits 7, 6 con sus correspondientes parejas, el 3 y 2. El siguiente byte ampliado se formará con las restantes parejas de bits. Para el modo de menor resolución, es decir el que permite mayor número de colores simultáneamente, la operación de magnificación será algo distinta a las anteriores, ya que en este caso el byte original únicamente es capaz de imprimir dos pixels. Así pues, el byte aumentado que se obtenga imprimirá únicamente un pixel. Por lo tanto, en este caso se observará la información correspondiente al primer pixel, la cual se indica en alguno de los bits 7, 5, 3, 1 y se ampliará, consiguiéndose así el primer byte ampliado. La rutina reduce la ocupación de una figura a la mitad. El restante byte magnificado se conseguirá chequeando la información de los restantes bits. Debemos tener en cuenta que dichas operaciones deberán efectuarse para todos y cada uno de los bytes que componen el gráfico original. Estas rutinas almacenarán el gráfico ampliado a partir de la posición de memoria que nosotros indiquemos, de esta forma conoceremos la localización de nuestro nuevo gráfico. El programa que hemos preparado incorpora una rutina de impresión para mostrarnos la forma del gráfico una vez magnificado, aunque dicha rutina se podrá quitar en cualquier momento, con sólo eliminar las llamadas que se hacen a la misma desde distintas partes del programa. Debemos tener en cuenta que el gráfico obtenido finalmente, tendrá una longitud doble a la del gráfico original, cosa que deberemos tener presente en caso de que se quiera salvar en disco o cinta dicha figura. Para realizar esta operación únicamente deberemos efectuar un save con la dirección que hayamos indicado en la correspondiente llamada al programa, y una longitud doble a la del gráfico original. Para un manejo más fácil de la rutina de magnificación de gráficos, hemos preparado un nuevo comando RSX, con el cual podremos realizar más fácilmente las operaciones de ampliación de gráficos. Esta nueva instrucción será del siguiente tipo: |MAGNI,MOD,POSX,POSY,GRAF,DIRB, DIMX,DIMYdonde cada uno de los parámetros corresponde a:Mod.....Modo de pantalla del gráfico.De esta forma una vez ejecutada la rutina de magnificación, el gráfico ampliado se encontrará en la dirección indicada por el parámetro dirb, con lo cual lo podremos salvar de la forma indicada anteriormente. |
| ![]() |
| Page précédente : Ahorrar memoria en gráficos |
|
Page créée en 650 millisecondes et consultée 17 fois L'Amstrad CPC est une machine 8 bits à base d'un Z80 à 4MHz. Le premier de la gamme fut le CPC 464 en 1984, équipé d'un lecteur de cassettes intégré il se plaçait en concurrent du Commodore C64 beaucoup plus compliqué à utiliser et plus cher. Ce fut un réel succès et sorti cette même années le CPC 664 équipé d'un lecteur de disquettes trois pouces intégré. Sa vie fut de courte durée puisqu'en 1985 il fut remplacé par le CPC 6128 qui était plus compact, plus soigné et surtout qui avait 128Ko de RAM au lieu de 64Ko. |