Rotar y colorear bitmaps en C#

4

Aprovechando un ratillo libre en estos días de fiestas, estoy convirtiendo el fondo de pantalla de Android PoliBalls a salvapantallas de Windows. Aunque el código original está en opengl y debería funcionar también en Windows hay cierto «tuneo» especial para Android, por lo que para empezar he decidido no complicarme la vida y tirar de System.Graphics.

Para rotar los bitmaps en opengl utilizaba transformadas y para colorear glBlendFunc junto a glColor4ub en mi caso. En C# el rotado es similar y para colorear he utilizado una matriz de color, que permite de una forma fácil transformaciones complejas de color en todos los canales.

Aquí tenéis un ejemplo que colorea el bitmap de rojo y lo rota 45º.

private void PoliBalls_Paint(object sender, PaintEventArgs e)
        {
            ImageAttributes imageAttributes = new ImageAttributes();
            float[][] colorMatrixElements = { 
               new float[] {1,  0,  0,  0, 0},        // red scaling factor
               new float[] {0,  0,  0,  0, 0},        // green scaling factor
               new float[] {0,  0,  0,  0, 0},        // blue scaling factor
               new float[] {0,  0,  0,  1, 0},        // alpha scaling factor 
               new float[] {0,  0,  0,  0, 1}};       // traslation factors

            ColorMatrix colorMatrix = new ColorMatrix(colorMatrixElements);
            imageAttributes.SetColorMatrix(
               colorMatrix,
               ColorMatrixFlag.Default,
               ColorAdjustType.Bitmap);

            e.Graphics.RotateTransform(45);
            e.Graphics.DrawImage(myImage, new Rectangle(0, 0, 64, 64), 0,0,64,64, GraphicsUnit.Pixel, imageAttributes);
        }

 

One Comment

  • 24 octubre, 2015 a las 7:35

    Es de lo mejor