Modificar valores de una imagen con la clase AdjustColor

Etiquetas: AdjustColor

Modificar valores de una imagen con la clase AdjustColor

Las clase AdjustColor permite crear un filtro para modificar las propiedades brillo, contraste, matiz y saturación de cualquier elemento de visualización. Esto nos permite, por ejemplo, pasar una imagen a blanco y negro (poniendo la saturación al mínimo(-100)) o ajustar los colores de una foto.

La clase AdjustColor está disponible para Flash Player 9 o superior.

El código comentado y los fuentes a continuación:

¿Qué es Stage3D y para qué sirve?

Etiquetas: molehill stage3D

La versión 11 del player incluye, entre otras novedades, las APIs para aceleración GPU lanzadas en su día bajo el nombre de "Molehill" (ahora Stage3D). Dicho de forma muy resumida, estas APIs permiten al player el acceso a la GPU (unidad de procesamiento gráfico), que es mucho mas rápida que la CPU (unidad central de procesamiento). Por poner un ejemplo práctico, con los motores 3D hechos para Flash Player 10 (Papervision3D, Away3D 3.x o Alternativa3D 7), el límite de polígonos en una escena estaba en unos 10.000 (y ya iba la cosa regular), mientras que con estas nuevas librerias, podemos tener en escena cientos de miles de polígonos con un rendimiento superior (en la wiki de Alternativa hablan de 3 millones de polígonos).

Aunque estas APIs están disponibles para cualquier persona, al ser de muy bajo nivel lo mas probable es que a no ser que queramos programar algo muy específico nos sea mas cómodo utilizar alguna de las librerías que hay ahora mismo en desarrollo y que traducen estas instrucciones a "lenguaje humano".

Algunas de las librerías que ya hacen uso de Stage3D son:

-Alternativa3D (a partir de la versión 8)

-Away3D (a partir de la versión 4)

-Flare3D

Otros enlaces de ayuda sobre Flash Player 11 y Stage3D son:

-Flash Player Developer Center - Stage 3D

-Adobe Max 2011: Flash Player 11 and Adobe Air 3: Changing the game

-Stage3D (Molehill): The History

Obtener coordenadas de un punto en Google Maps

Obtener coordenadas de un punto en Google Maps

Este truco sirve para cuando necesitamos obtener las coordenadas de un punto en Google Maps (por ejemplo para utilizarlas luego para mostrar ese mismo punto en un mapa que montemos nosotros en Flash con la API de Google). Para obtener estas coordenadas basta con que busquemos la dirección que queramos en Google Maps y después, en la barra de dirección pongamos esta linea de javascript:

  1. javascript:void(prompt('',gApplication.getMap().getCenter()));

Pulsamos intro, y nos saltará una ventana con las dos coordenadas del punto que hemos buscado.

Away3D 4 : Editor de clicks

Etiquetas: away3D4

Away3D 4 : Editor de clicks

Ya queda poco para que salga la versión beta de Away3D 4, mientras tanto he estado haciendo pruebas con las últimas actualizaciones y ha salido esto. En cuanto esté en beta publico los fuentes.

Para poder ver esta demo hay que tener instalado FP11.

VER DEMO

Como depurar errores de Actionscript I

Muchas de las preguntas que aparecen en los foros de Actionscript son por errores en el código que podrían responderse siguiendo algunos pasos a la hora de depurar.

Lo primero es tener en cuenta donde se ha producido el error, para ver de que manera podemos depurarlo:

1. El error se produce al compilar

Cuando publicamos o probamos la película saltan uno o varios errores en la ventana "Errores de compilador" de Flash. Algo parecido a esto:

Flash Error

Para arreglarlo, evidentemente tenemos que ir a la linea indicada en la ventana de errores y arreglar el error en cuestión. Dependiendo del error, puede ser mas fácil o mas dificil solucionarlo, veremos como afrontar estos errores en la siguiente parte de este post.

2. El error se produce en tiempo de ejecución

Este tipo de errores pueden ser mas difíciles de depurar.

-Si estamos probando desde el IDE (desde Flash), al producirse uno de estos errores saltará un error de este tipo en el panel de "Salida".

TypeError: Error #1009: No se puede acceder a una propiedad o a un método de una referencia a un objeto nulo.
at index_fla::MainTimeline/imprimir()

En la descripción encontramos en que clase y en que método está localizado el error, por lo que deberemos acceder a la fuente para solucionarlo.

-Si el error se produce probando en el navegador, podemos utilizar el FlashPlayer Debugger para depurar el error. A veces, probamos una aplicación en el Flash IDE y al subirlo y probar en el navegador algo falla o no funciona como esperábamos. Si tenemos instalado en el navegador el Flash Player "normal", los errores que se produzcan en las películas que veamos con ese navegador se producirán "en silencio". Normalmente la película dejará de funcionar, pero no saltarán avisos de error ni alertas. Para solucionar esto, podemos instalar la versión "debugger" para nuestro navegador (podéis encontrarla aquí).

Con esta versión instalada, cada vez que se produzca un error en un película, saltará una ventana de error en el navegador con información sobre su procedencia:

Flash Error Debugger

-Dentro del los errores que se producen en el navegador, está esta pregunta clásica:

Tengo una galería de fotos que funciona bien en mi ordenador, pero al subirla deja de funcionar, que está pasando¿?

En el 90% de los casos, pasa una de estas dos cosas:

-Es un error de rutas: Flash no está encontrando las fotos porque la estructura que tenemos en el servidor no es la misma que tenemos en local. Para ver que está buscando Flash en el servidor, pordemos utilizar algún proxy de depuración Por ejemplo, el Fiddler (gratis y para PC). Este programa nos dirá todas las peticiones que está haciendo nuestro navegador, y si alguna de ellas ha fallado. También es muy útil cuando enviamos o recibimos variables al servidor (a un archivo php, asp, etc), ya que podemos saber que está mandando Flash y que está devolviendo el servidor.

-Es un error de seguridad SandBox: este error ocurre cuando intentamos cargar un archivo de un servidor distinto al nuestro. Si ocurre esto y tenemos instalado Flash Player Debugger saltará un error en el navegador de este tipo:

securityError no controlado: text=Error #2048: Violación de la seguridad Sandbox

Para solucionarlo podemos mover los archivos a nuestro servidor o poner un archivo crossdomain en el servidor del que vamos a cargar los archivos.

En la segunda parte del post entraremos mas en detalle en cada uno de los tipos de error.

Disponible la beta de Flash Player 10.3

Ya está disponible la beta de Flash Player 10.3 para Windows, MacOS y Linux.

Algunas de las novedades de esta versión son:

-Nuevas APIs para el micrófono que nos dan acceso a cancelación de sonido, detección de actividad y modificación de niveles.

-Panel de Control nativo para el player.

-Notificaciones autómaticas para MacOS

Podéis ver el listado completo de novedades y la descarga del player, aquí

.

Detectar soporte para HTML5 con Modernizr

Etiquetas: modernizr

Cuando empezamos a trabajar con HTML5, tenemos que tener en cuenta que no existe algo tan simple como "comprobar la compatibilidad total del navegador con HTML5", sino que tenemos que comprobar si el navegador soporta cada una de las funciones que vayamos a utilizar. Por ejemplo, podría ser que un navegador soporte la etiqueta <canvas>, pero no la etiqueta <video>, e incluso soportando la etiqueta<video>, puede que no esté preparado para reproducir determinados formatos de vídeo.

Si comprobamos el soporte para cada una de estas funcionalidades, podemos ofrecer un contenido alternativo o avisar a los usuarios para que actualicen su navegador.

Modernizr es una librería de Javascript que detecta el soporte para funcionalidades de HTML5 y CSS3 de manera muy sencilla. Por ejemplo si queremos comprobar si está disponible la etiqueta <canvas>:

  1.  
  2. if (Modernizr.canvas) {
  3.   //Podemos utilizar canvas
  4. } else {
  5.   //No está disponible canvas
  6. }
  7.  

Podéis encontrar mas ejemplos de uso y la última versión de la librería en la web de Modernizr.

También recomiendo echar un ojo a este recurso (en inglés), donde viene explicado mas a fondo el tema (y tiene otros capítulos muy interesantes): diveintohtml5.org

HTML5: pizarra con canvas y JavaScript

Etiquetas: canvas strokeStyle beginPath stroke lineTo

Una de las novedades de HTML5 es la etiqueta <canvas>. Esta etiqueta permite crear dinámicamente formas y elementos 2d. En este ejemplo, crearemos una pizarra sencilla con esta nueva etiqueta y algo de JavaScript.

La sintaxis para crear un objeto canvas, es la siguiente:

  1.  
  2.         <canvas id="pizarra" width="300px" height="200px"></canvas>
    
  3.  

Como vemos, especificamos un ancho, un alto, y un id ("pizarra") que utilizaremos para manipular el canvas desde JavaScript. El código JavaScript comentado sería este:

Perdida de sesión al hacer una subida con FileReference

Etiquetas: FileReference

Este bug / "comportamiento raro", se reproduce al hacer una subida desde flash con FileReference. Esta subida hace que se pierda la sesión en el servidor, lo que nos puede dar problemas si estamos utilizando el id de sesión para controlar las subidas de los usuarios.

Una solución es pasar por get el id de la sesión a la hora de hacer la subida:

  1.  
  2. var request:URLRequest=new URLRequest('archivo_subidor.php?id_sesion=' + id);
  3. fileReference.upload(request);
  4.  

y recrear la sesión en php con ese id:

  1.  
  2.   if(array_key_exists('id_sesion', $_REQUEST)) {
  3.   session_id($_REQUEST['id_sesion']);
  4.   }
  5.   session_start()

Mas información sobre el tema aquí, y gracias a Israel Pastrana por la info que me pasó en su día (se topó con el bug el mismo día que yo :D)

setClipboard: como copiar un texto al portapapeles desde Flash

Etiquetas: System setClipboard

Con esta linea podemos copiar un texto al portapapeles del usuario desde Flash. La sintaxis es igual para Actionscript 2.0 y Actionscript 3.0:

  1.  
  2. System.setClipboard("El texto que queremos copiar");
  3.  

Es muy útil por ejemplo si tenemos una web que genera códigos o urls personalizadas y queremos dar al usuario la oportunidad de copiarlas copn un botón.