Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Código vb .net 2008: Pizarra

Iniciado por kaito, 22 de Septiembre de 2012, 08:28:51 PM

« anterior - próximo »

kaito

He retomado visual basic .net para crear una aplicación de dibujo/pintado por capas utilizado la funciones del GDI+. Anteriormente realicé otra aplicación, compuesta por 3 minijuegos o formularios, que implementaba una librería de sonido y una base de datos creada con acces: http://www.stratos-ad.com/forums/index.php?topic=14554.msg149416#msg149416

Durante el proceso, he descompuesto una imagen en blanco y negro (para colorear) en varias partes. De este modo logramos pintar o dibujar áreas específicas fácilmente.


Descargar: https://app.box.com/s/q2j5m4l1pfz7mp0g0dmf

Para obtener el alphaMask de cada capa o layer, he utilizado una pequeña parte del código creado por: http://www.codeproject.com/Articles/313143/VB-NET-Image-Filters

Para el dibujo, inicialmente utilizaba la función 'drawline', pero finalmente he utilizado el ejemplo de 'drawpath' utilizado en el código: http://www.codeproject.com/Articles/4634/A-Simple-VB-NET-Freehand-Drawing-method (aunque en este proyecto no dibujaba sobre un bitmap).

-------------------------

PROBLEMA SURGIDO: Superponer dos o más imágenes con canal alfa en VB.

En el ejemplo, dentro de la carpeta imágenes(que se encuentra dentro de la carpeta debug de la solución) encontramos la imagen principal -sin descomponer-. Las diversas partes de la imagen se encuentran dentro de la subcarpeta 'imgs' que comparten el mismo nombre y se encuentra numeradas desde cero.

En la primera imagen cero o capa/layer inicial, ubicamos las líneas o trazos en negro del dibujo junto a las partes del dibujo que no queramos colorear (por ejemplo el blanco de los ojos, alguna sombra, etc...).

En VB, las imágenes se muestras desde un objeto 'PictureBox'. Pero si superponemos dos o más 'PictureBox' las partes transparentes de la imagen se muestran opacas.

Para poder superponer varias imágenes (en el ejemplo utilizo 12 capas o layers), se debe superponer las imágenes desde un 'Bitmap' utilizando la GDI+ mediante la clase 'Graphics'. Después asociamos el bitmap generado durante la composición a un único 'PictureBox', actualizando la imagen mediante el método 'Refresh'.

Con este método, se podría crean las animaciones y composiciones necesarias para un juego 2D básico.

--------------------------------------------

La composición de pintado consta de:rellenar completamente del color seleccionado, dibujar alphaMask, hacer transparente color negro, montar encima el resto de capas no seleccionadas, y la composición del dibujo: mostrar capa con el área específica seleccionada, dibujar trazos, dibujar alphaMask, hacer transparente color negro, montar encima el resto de capas no seleccionadas.

En la composición,  utilizamos el evento click del ratón (para el pintado), y los eventos mousemove y mouseup (para el dibujo).

-----------------------------------------

También, en el primer proyecto que hice en vb, utilicé unas dimensiones fijas de ventana 1024x768 centrado. Me pareció muy complicado realizar un cambio de resolución de pantalla desde un proyecto WindowsForm con vb, lo que en los motores de juego se realiza sin mucha dificultad.

Este nuevo proyecto es completamente SIZEABLE. El formulario está diseñado desde una resolución de 800x600 (existente en todos o casi todos los equipos actuales), donde todos los controles (excepto la barra de menú) se ajustan a las dimensiones actuales del formulario. Para esto, he guardado en la propiedad de texto 'AccesibleDescription' de cada control 'sizeable' su localización y dimensiones separado por ;

Luego una rutina se encarga de separar cada dato y calcular la nueva posición y dimensión del control.






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.