Creando imágenes divertidas en C# - Parte 2

El otro día publicamos un artículo en el que os hablábamos sobre cómo crear imágenes divertidas en C#. Y es que mediante la programación, también podemos desplegar nuestras dotes artísticas. Vale, aquí en programacion.net también admitimos la programación como un arte, pero no nos referimos a ese tipo de arte, nos referimos a algo más visual, algo que pueda ser admirado por los que no tienen conocimientos de programación.

Hemos experimentado un poco más en la materia y os traemos otro tutorial en el que trasteamos con la creación de imágenes abstractas en C#. Con esta imagen crearemos figuras oníricas y colores, no os esperéis que vamos a dibujar Las Meninas de Velazquez. ¿Estás preparado para crear un poco de arte programando? ¡Pues vamos allá!

El Imaging SDK lo utilizaremos para las configuraciones del tamaño de la imagen y efectos de n presets (solo metadatos). Si has consultado el primer artículo de esta serie, todo esto te resultará familiar. He añadido también una nueva track bar para obtener tamaños de segmentos variables. El diseño de la aplicación es el siguiente:

Resultados:

El código

Desde que procesamos diagonalmente solo una parte triangular de la imagen, se recorre con un bucle, por lo que tenemos que hacer otro pase del proceso en la imagen, a lo que conviene separar en distintos bucles.

using ImagingSDK.Configuration;
using System;
using System.Drawing;
using System.Drawing.Imaging;
using System.Windows.Forms;

namespace Imaging
{
    public partial class MainForm : Form
    {
        /// 
        /// variable used for generating images on a per image basis.
        /// the var is increased each time a image in generated.
        /// 
        public int imgCount { get; set; }

        public MainForm()
        {
            InitializeComponent();
            imgCount = 0;
        }

        private void rndBtn_Click( object sender , EventArgs e )
        {
            //disabling the button just to make sure any 
            rndBtn.Enabled = false;

            //setting up the configuration for the image.
            ImageSizeConfiguration Config = new ImageSizeConfiguration(ImageSizeConfiguration.SizeConfig.S_360p);
            ImagingSDK.ImageProcessor imgPrcsr = new ImagingSDK.ImageProcessor(@"C://1.bmp" , Config);

            //Instantiating the image.
            Bitmap image = new Bitmap(imgPrcsr.sizeConfig.width , imgPrcsr.sizeConfig.height);

            //the rbga integers for pixels.
            int a, r, b, g, x2, y2;

            //Random number generator for pixels
            Random rand = new Random();

            //width for bars of colors.
            int Width = WidthBar.Value, PrevX = 0;

            //Color to apply to pixels
            Color c = Color.FromArgb(rand.Next(0 , 255) , RedTrack.Value , GreenTrack.Value , BlueTrack.Value);
         
            var w2 = 0;
            //loooping thru the pixels.
            //diagonally for the first triangle.
            for (int y = 0 ; y < imgPrcsr.sizeConfig.height ; y++)
            {
                x2 = 0; y2 = y;
                if (w2 == Width)
                {
                    //create random pixels
                    a = rand.Next(64 , 255);
                    r = RedTrack.Value;
                    g = GreenTrack.Value;
                    b = BlueTrack.Value;

                    //generate color from random ARGB values
                    c = Color.FromArgb(a , r , g , b);

                    w2 = 0;
                }

                while (y2 >= 0 && x2 < imgPrcsr.sizeConfig.width)
                {
                    image.SetPixel(x2 , y2 , c);
                    x2++; y2--;
                }

                w2++;
            }

            //setting the width variable back to zero.
            w2 = 0;

            //second pass on the second triangle.
            for (int x = 1 ; x < imgPrcsr.sizeConfig.width ; x++)
            {
                x2 = x; y2 = imgPrcsr.sizeConfig.height-1;
                if (w2 == Width)
                {
                    //create random pixels
                    a = rand.Next(64 , 255);
                    r = RedTrack.Value;
                    g = GreenTrack.Value;
                    b = BlueTrack.Value;

                    //generate color from random ARGB values
                    c = Color.FromArgb(a , r , g , b);

                    w2 = 0;
                }

                while (y2 >= 0 && x2 < imgPrcsr.sizeConfig.width)
                {
                    image.SetPixel(x2 , y2 , c);
                    x2++; y2--;
                }

                w2++;

            }

            //save the image first before setting it to the 
            image.Save(imgCount+".png" , ImageFormat.Png);

            //setting the image in the picture box.
            Viewer.Image = image;

            //Enabling the button again.
            rndBtn.Enabled = true;

            //increasing the image count to get the next image.
            imgCount++;
        }

        private void loadBtn_Click( object sender , EventArgs e )
        {

        }
    }
}

Y este ha sido el artículo en el que trataba explicaros cómo aplicar como crear imágenes divertidas en C#, esperamos que te haya gustado y sepas aplicarlo en tus futuros proyectos. Muchas gracias a la autora del código, Akash Gutha, por cedernos la publicación del mismo.

Ya sabes que si nos quieres proponer un tema que quieres ver reflejado como un tutorial o como una práctica, solo tienes que hacer uso del área de comentarios de un poco más abajo. Por el contrario, si quieres enviarnos tus propios tutoriales, puedes hacerlo a través de la intranet de usuarios que está habilitada para ello, a través del menú Enviar Tutorial. Ya sabes, ayúdanos a crecer con tus conocimientos. ¡Un saludo y feliz código!

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP