En este artículo paso a paso te mostramos cómo puedes utilizar las clases gráficas para crear tus propios herramientas de tratamiento fotográfico y de aplicación de efectos.

En concreto nos centraremos en este segundo aspecto con la creación de un efecto que te permitirá generar una versión artística a partir de cualquier archivo que tenga un formato compatible QuickTime.

Antes de entrar en materia vayan por delante un par de cuestiones. La primera es que hemos optado por simplificar al máximo el código del programa, las cuestiones de diseño orientado a objetos y la presentación gráfica de la interfaz de usuario. En definitiva, aspectos por los que cualquier buen programador no dudaría en echarse las manos a la cabeza. El objeto de hacerlo así es para que el artículo no sea demasiado extenso, centrándonos exclusivamente en los aspectos fundamentales que se desean mostrar.

La segunda cuestión es la verdaderamente importante, ya que con el ejemplo utilizado en este artículo te darás cuenta de lo sencillo que resulta procesar imágenes, pues REALbasic proporciona de serie una buena cantidad de clases gráficas listas para usar. Esto significa que, por ejemplo, no tienes que preocuparte de teclear cientos de líneas de código para encargarte de programar por tu cuenta un módulo de exportación a los formatos gráficos más comunes (algo que tendrías que hacer para ofrecer la posibilidad de guardar a disco la imagen procesada). En vez de eso sólo tienes que escribir una línea de código para que sea REALbasic quien presente al usuario un cuadro de diálogo estándar para la exportación de archivos gráficos, donde el usuario no sólo podrá elegir el nombre y ubicación de destino para el archivo sino también guardarlo con cualquiera de los formatos gráficos soportados por QuickTime y ajustando las opciones en aquellos en los que exista dicha posibilidad (calidad JPEG, JPEG 2000, TIFF, etc.).

Tampoco tendrás que escribir cientos de líneas de código para comprobar e interpretar el formato gráfico del archivo que el usuario ha elegido para abrirlo con la aplicación. Sólo necesitas utilizar el método de la clase que en REALbasic se encarga de trabajar con los archivos. Será el propio REALbasic el que se encargue de comprobar si se trata de un archivo gráfico y si puede interpretarlo o no.

Anatomía de una imagen

Por último, no es necesario que escudriñes la documentación para desarrolladores de Apple para saber cómo puedes acceder a las posiciones de memoria que contienen los valores correspondientes a cada uno de los píxeles de la imagen. En el fondo, el acceso a cada uno de los píxeles de una imagen de mapa de bits es la forma que tenemos de modificarla, ya sea en su geometría o en su color.

De lo primero, el acceso a los píxeles de la imagen, se encarga una de las propiedades de la clase Picture (RGBSurface) con la que se obtiene acceso a cada uno de los puntos de color que componen la imagen utilizando las coordenadas X e Y. Para lo segundo, en concreto el uso del color, utilizaremos la clase Color que nos permite crear nuevos colores o procesar los colores de un objeto ya existente en cualquiera de los tres modelos de color de uso más frecuente: RGB (rojo, verde, azul), CMY (Cian, Magenta, Amarillo) o HSB (Valor, Saturación, Intensidad).

En resumen, como programadores, sólo tendremos que preocuparnos del algoritmo o, dicho de otro modo, la forma en la que queremos transformar la información de cada uno de los puntos de color que forman la imagen original para llegar a la imagen resultante. Del resto se encarga REALbasic. Esto se traduce en que el programa de este ejemplo sólo ocupa 94 líneas de código y aunque no tardarás mucho en teclearlo puedes descargar desde www.macworld.es el archivo fuente o el ejecutable listo para utilizar.

Si eliges la primera opción podrás retocarlo y adaptarlo a tus necesidades; por ejemplo añadir un diccionario AppleScript para procesar imágenes por lotes (consulta el artículo “Automatiza tus aplicaciones REALbasic” publicado en Junio de 2004), ampliarlo con más efectos basándote en el algoritmo utilizado en este ejemplo, mejorar la interfaz gráfica, etc.

1- Crear el esqueleto del programa

Cuando seleccionas crear nuevo proyecto en REALbasic deberás elegir la opción “Desktop Application” de entre las plantillas propuestas. Al hacerlo se creará un nuevo proyecto con una estructura de programa básica. Esto incluye:

- El objeto que representa la barra de menús estándar (la que contendrá los comandos de tu programa).

- Un objeto que representa la ventana principal de tu programa.

- Un objeto que representa a tu aplicación. Este es el objeto que representa la instancia de tu propio programa en ejecución, y es el encargado, por ejemplo, de gestionar eventos como el que tiene lugar cuando haces doble clic sobre el icono de un documento en el escritorio para abrirlo con el programa que lo creó.

2- Define el comando “Abrir”

La operación de definir la barra de menús para un programa en REALbasic es muy sencilla. En nuestro ejemplo añadiremos un único comando “Abrir”, responsable de presentar al usuario la ventana de navegación estándar para que seleccione la fotografía que se va a procesar con nuestro “filtro”.

Para definir un nuevo comando, haz doble clic sobre el elemento MenuBar1 en la ventana de proyecto. Al hacerlo se abrirá la ventana de edición de menús. Haz clic sobre el elemento File para que se despliegue el menú y, a continuación, pulsa con el ratón sobre la casilla vacía. Al hacerlo estaremos definiendo la posición que ocupará el nuevo elemento del menú.

A continuación sólo resta definir una pocas características en la ventana de propiedades. Las que nos interesan para este ejemplo son:

Name. Este es el nombre con el que nos referiremos al comando desde el programa; es decir, no se trata del nombre que verá el usuario cuando despliegue el menú Archivo, sino el nombre que utilizaremos posteriormente para, por ejemplo, añadir el evento asociado a dicho comando (enseguida entenderás mejor esta relación entre comando de menú y evento).

Text. Utiliza esta propiedad para introducir el nombre del comando (en nuestro ejemplo “Abrir”). Es conveniente observar las normas estándar propuestas por Apple para el diseño de interfaces gráficas.

ComandKey. Utiliza esta propiedad para escribir la tecla que se utilizará como atajo de teclado para que el usuario pueda ejecutar el comando sin necesidad de que deba seleccionarlo específicamente con el ratón. Por ejemplo, para el comando “Abrir”, el atajo de teclado debe ser “O”.

3- Definir una imagen con propiedad

Cuando el usuario ejecuta el programa y seleccione el comando Abrir aparecerá una ventana de navegación en la que podrá elegir un archivo gráfico. Una vez que el programa compruebe que se trata de un archivo compatible, deberá “guardar” el contenido de la imagen en algún sitio para trabajar con ella, y ese sitio será una variable definida en la clase App.

En la terminología de REAlBasic, este tipo de variables (que se pueden definir en las clases, módulos y ventanas entre otros elementos) reciben el nombre de Propiedades y pueden