![]()
Este tutorial explica como manipular imágenes bitmap desde Lingo con las nuevas funciones que incorpora Director 8. Está escrito para programadores iniciados aunque los ejercicios y ejemplos son bastante elementales. Al final de la página, dispones de un enlace para bajarte el curso completo con los archivos de ejemplo (D8).
|
miImage = member(ìgrafico.bmpî).image |
2. Objeto image del Stage. Los cambios efectuados en el objeto se reflejarán directamente sobre el Stage. |
miImage = (the stage).image |
3. Objeto image autocontenido. No está tomado de ningún gráfico. Permanece invisible en la memoria mientras no se copie al Stage o dentro de un "member". Image(): Hay que fijar el tamaño ( en pixels ) y la profundidad de color ( en bits). Opcionalmente, también se puede especificar un canal alfa y la paleta de colores. Sintáxis: Image ( ancho, largo, profundidad de color {, canal Alfa }{, paleta}) La profundidad de color puede ser 1, 2, 4, 8, 16, 32 bits. Si es 32 se puede especificar un canal Alfa poniendo un 8: |
miImage = image (320,240,32,8) |
Para profundidades 8, 4, y 2 bits se puede especificar la paleta entre las propias de Director o una personalizada. Si se intenta dibujar con un color que no existe en la paleta Director tomará el más cercano. Ejemplos: |
miImage = image (320,240,16) miImage = image (100,100,8,#systemWin) miImage = image (100,100,2, member "paleta") |
Truco: Para asignar un objeto imagen a un cast member, creamos desde la ventana Paint un gráfico cualquiera ( por ej: un punto negro ) y lo nombramos "vacio". Entonces: |
member("vacio").image = miImage |
En los tres casos, salvo errores, la variable miImage contendrá el objeto image. Realmente, miImage guarda la dirección de memoria reservada para ese gráfico. Si, por curiosidad, hacemos "put miImage" desde la ventana message el resultado será algo como esto: -- < image: 4e2380> |
PRACTICA 1 En el archivo image1.dir se crean tres objetos image de diferente forma. Más adelante, cuando conozcamos funciones de dibujo, manipularemos los objetos.
|
member("migráfico.bmp").image.draw(0, 0, 25, 25, [#shapeType:#oval, #lineSize:2, #color: rgb(0, 0, 255)]) |
Fill(): Dibuja una línea o figura dentro de un objeto imagen con relleno. Su uso es muy parecido a Draw. Sintáxis: ObjetoImagen.fill ( x1,y1,x2,y2, parámetros de tipo de figura o grosor de línea o color ) #ShapeType: Tipos de figura posibles #oval, #rect, #roundRect, o #line. #LineSize: Grosor de línea #Color: Color del relleno #bgColor: Color del borde Ejemplo: |
member("migráfico.bmp").image.fill(0, 0, 25, 25, [#shapeType:#rectl, #color: rgb(0, 255, 255)]) |
PRACTICA 2 Image2.dir: dibujar directamente sobre el Stage con las funciones Draw y Fill.
|
GetPixel(): Devuelve el valor del color de una imagen en una coordenada concreta. El formato del resultado puede ser en RGB o en valor entero Sintáxis: ObjetoImagen.getPixel(point(x, y) {, #integer}) Si omitimos el parámetro #integer, el formato será RGB para profundidades de 16 y 32 bits y para profundidades de 1, 2, 4 y 8 bits la respuesta será en modo "índice de paleta". Para 32 bits, si la imagen incluye canal alfa, es mejor usar el modo entero para no perder su información. Ejemplo: |
put member("migráfico.bmp").image.getPixel(point(1, 1) ) |
Dará como resultado algo así: -- rgb( 0, 0, 255) |
SetPixel(): Fija el color de un pixel de una imagen en una coordenada concreta. Sintáxis: ObjetoImagen.SetPixel( x, y, color) Ejemplo: |
member("migráfico.bmp").image.setPixel ( 1, 1, rgb ( 0,0,255) ) |
Esto pinta de color azul el pixel de la posición (1,1), del bitmap "migráfico.bmp".
|
PRACTICA 3 Image3.dir: ejemplo completo del uso de SetPixel y GetPixel.
|
(1) member("Destino.bmp").image.copyPixels(member("Fuente.bmp").image, rect(0, 0, 25, 25), rect(0, 0, 25, 25)) |
Copia un rectangulo de 25x25 de la posición 0,0 del gráfico "fuente.bmp" al gráfico "destino.bmp" en la misma posición y tamaño. |
(2) member("Destino.bmp").image.copyPixels(member("Fuente.bmp").image, member("Destino.bmp").rect, member("Fuente.bmp").rect) |
Copia por completo el gráfico "fuente.bmp" en el gráfico "destino.bmp". Si el tamaño fuera diferente se ajustaría al tamaño destino. |
(3) member("Destino.bmp").image.copyPixels(member("Fuente.bmp").image, member("Destino.bmp").rect, member("Fuente.bmp").rect, [#blendLevel: 50]) |
Copia por completo el gráfico "fuente.bmp" en el gráfico "destino.bmp" aplicando un nivel de transparencia del 50%.
|
member("migráfico.bmp").duplicate() member("otrográfico.bmp").duplicate(15) |
La primera orden copia "migráfico.bmp" en el primer cast libre y la segunda copia "otrográfico.bmp" en el cast 15. Es posible asignar a un miembro de reparto un objeto imagen. Ejemplo: |
member ("migráfico.bmp").image = ObjetoImagen |
PRACTICA 4 Image4.dir: uso de CopyPixels.
|
miAlfa = member("migráfico.bmp").image.extractAlpha() member("nuevo.bmp").image=miAlfa |
Esto crea un objeto imagen conteniendo el canal alfa y lo salva dentro del gráfico "nuevo.bmp". Si tenemos un gráfico de 32 bits con un canal alfa, resulta útil extraerlo para preservar el canal alfa porque si bajamos la profundidad de color de la imagen, pierdes la información del canal alfa. setAlpha(): Fija el nivel de transparencia del canal alfa entre 0 y 255. Valores bajos, más transparentes y valores altos, más opacos. Sintáxis: ObjetoImagen.setAlpha(nivelAlfa) |
member("migráfico.bmp").image.setAlpha(50) |
useAlpha(): Habilita o no, la información de un objeto imagen con canal alfa. Sintáxis: ObjetoImagen..useAlpha Ejemplo: |
ObjetoImagen1.useAlpha= TRUE ObjetoImagen2.useAlpha= FALSE |
PRACTICA 5 Image5.dir: uso de canales Alfa.
|
PRACTICA 6 Image6.dir: uso de mFlood(); función para colorear de Jakob Hede Madsen.
|
Enlaces InteresantesMuy buenos ejemplos y tutoriales de Imaging Lingo: http://www.simtek.dircon.co.uk/deight/index.html
|
Pulsa aquí para bajar el Tutorial de Image+ Ejemplos ©2001 Pedro Agriarte e-mail:agriarte@openbank.es URL:http://www.geocities.com/agriarte |