|
Manipulación de Bitmaps I
18/01/2002
La manipulación de los mapas de bits
se ha convertido en un campo de trabajo muy interesante en la informática
actual. Esta manipulación es posible en 3DStudio en el nivel
más bajo mediante la programación con MAXScript. En
la siguiente serie de artículos se darán los primeros
pasos en el tratamiento de los mapas de bits utilizando unos conocimientos
básicos de programación y unas pocas matemáticas,
también básicas.
El objeto Bitmap
El tratamiento de los mapas de bits se realiza mediante los objetos
de la clase Bitmap de MAXScript. Esta clase, como todas las del
lenguaje, dispone de sus propios constructores, de sus propiedades
y como no, de sus métodos.
Empezaremos viendo uno de los constructores de la clase Bitmap,
openBitMap. Este constructor es el encargado de abrir un mapa de
bits existente. De esta forma se le tiene que pasar como argumento
la ruta del mapa de bits sobre el que se trabajará. La sintaxis
quedará de la siguiente forma:
mimapa = openBitMap "C:\\GMMD\\mapa.bmp"
Una observación sobre la sintaxis del constructor:
Las barras invertidas
en MAXScript se tienen que duplicar cuando representen una ruta
a un archivo.
Además el lenguaje dispone de otro constructor que crea
un mapa de bits vacío, Bitmap. Este constructor necesita
dos parámetros iniciales: la altura y la amplitud del mapa.
Por ejemplo, a continuación se crea un mapa de bits de 80
x 80 píxels de la siguiente forma:
mimapa2 = Bitmap 80 80
Una vez visto como se asigna un mapa de bits a una variable del
entorno de programación, se verán unas propiedades
básicas de la clase Bitmap:
el nombre
del fichero: filename.
la anchura:
width.
la altura:
height.
Si se tiene abierto un Bitmap y asignado a la variable mimapa, se
accede a estas propiedades con la siguiente sintaxis:
nombremapa
= mimapa.filename
anchumapa
= mimapa.width
altumapa =
mimapa.height
Ahora las tres nuevas variable almacenan el nombre, la altura y
la anchura del Bitmap. Existe una diferencia entre la primera propiedad
y las dos siguientes, filename es una propiedad que permite la lectura
y la escritura. Esto significa que se puede modificar el nombre
del mapa, de hecho la ruta completa. Sin embargo, tanto width como
height, son propiedades de solo lectura y por tanto solo se puede
acceder a su valor, pero no es posible modificarlo.
Por ejemplo, para asignar un nombre a mimapa2 creado anteriormente
se utilizará la siguiente sintaxis:
mimapa2.filename = "C:\\GMMD\\mapa2.bmp"
En este punto del artículo se ha abierto un Bitmap y se
han visto tres propiedades de este, pero todavía no se ha
visualizado. Para esta función la clase de Bitmap, posee
dos métodos:
uno para
abrir el Bitmap en el buffer de cuadro virtual: display.
otro para
cerrar este: undisplay.
La sintaxis de los métodos es distinta de la utilizada en
las propiedades. En los métodos se escribe primero el método
y a continuación el objeto al cual hace referencia:
display mimapa
undisplay
mimapa
Pero no son estos los dos únicos métodos de la clase
Bitmap, es posible guardar un Bitmap con el método save,
copiarlo en otro Bitmap con copy y, lo que es imprescindible, cerrarlo
una vez terminado el trabajo sobre este con el método close.
La sintaxis de estos métodos es la siguiente:
save mimapa
copy mimapa
mimapa2
close mimapa
Solo una observación, en el método copy mimapa2 tiene
que ser otro Bitmap previamente creado.
Hasta ahora se ha abierto un mapa de bits, cambiado su nombre,
visualizado y cerrado, pero todavía no se ha trabajado con
los valores del mapa de bits, es decir con los valores de cada píxel.
De hecho la manipulación de estos valores es lo que hace
tan potente el MAXScript en el tratamiento de los mapas de bits.
Los métodos responsables de esta manipulación de los
pixeles son: getPixels y setPixels. De estos dos se va a estudiar
en este artículo el primero. Estos métodos facilitan
por un lado los valores que caracterizan el color de cada píxel,
getPixels, y por otro lado la modificación de estos valores,
setPixels. Un primer ejemplo muy simple:
primerpixel = getPixels mimapa [0,0] 1
Aquí primerpixel referencia un vector de objetos de la clase
Color. Este objeto Color almacena los valores RGB de cada píxel.
Por tanto, es posible acceder y lo que es mas importante, modificar
cada valor RGB con las propiedades red, green y blue de la clase
Color (normalmente utilizando las abreviaciones r, g y b).
Las coordenadas [0,0] del método getPixels representan el
primer píxel de la matriz de Bitmap, de esta forma el comando
anterior nos devuelve los valores RGB del píxel superior
izquierdo. El segundo parámetro indica el número de
pixeles de la fila que queremos leer a partir del [0,0], es decir,
getPixels puede devolver todos los valores RGB de una fila de la
matriz del Bitmap, pero nunca de dos filas distintas.
siguientespixels = getPixels mimapa [0,0] mimapa.width
Aquí siguientespixels devuelve un vector de objetos del
tipo Color, con los valores RGB de cada pixel de la primera fila.
En los siguientes artículos se utilizarán las estructuras
de control de flujo disponibles en MAXScript, con estas se realizarán
recorridos por el mapa de bits, píxel a píxel. Se
tratarán los valores RGB con las propiedades red, green y
blue de los pixeles obtenidos con getPixels. Y a continuación
se asignarán estos valores modificados al mapa de bits con
el método setpixels. La modificación de estos mapas
puede tener objetivos muy variados, entre la aplicación de
filtros gráficos hasta la encriptación de la imagen.
|