Csharp/C Sharp/2D Graphics/Color Matrix

Материал из .Net Framework эксперт
Перейти к: навигация, поиск

Image manipulation using ColorMatrix

<source lang="csharp">

 using System;
 using System.Drawing;
 using System.Drawing.Drawing2D;
 using System.Collections;
 using System.ruponentModel;
 using System.Windows.Forms;
 using System.Data;
 using System.Drawing.Imaging;
 public class Form1 : System.Windows.Forms.Form
 {
   public Form1()
   {
     InitializeComponent();
   }
   private void InitializeComponent()
   {
     this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
     this.ClientSize = new System.Drawing.Size(292, 273);
     this.Text = "Pen Cap App";
     this.Resize += new System.EventHandler(this.Form1_Resize);
     this.Paint += new System.Windows.Forms.PaintEventHandler(this.Form1_Paint);
   }
   static void Main() 
   {
     Application.Run(new Form1());
   }
   private void Form1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
   {      
     Bitmap bmp = new Bitmap("winter.jpg");
     Graphics g = e.Graphics;
     float[][] matrixItems = {
                       new float[] {0.2f, 0, 0, 0, 0},
                       new float[] {0, 0.8f, 1, 0, 0},
                       new float[] {0, 0, 1, 0, 0},
                       new float[] {0, 0, 0, 1, 0}, 
                       new float[] {0, 0, 0, 0, 1}};
     ColorMatrix colorMatrix = new ColorMatrix(matrixItems);
     ImageAttributes imageAtt = new ImageAttributes();
     imageAtt.SetColorMatrix(colorMatrix, ColorMatrixFlag.Default, ColorAdjustType.Bitmap);
     TextureBrush tb = new TextureBrush(bmp, new Rectangle(0, 0, bmp.Width, bmp.Height), imageAtt);
     tb.WrapMode = WrapMode.Tile;
     g.FillRectangle(tb, this.ClientRectangle);
     bmp.Dispose();
     tb.Dispose();
   }
   private void Form1_Resize(object sender, System.EventArgs e)
   {
     Invalidate();
   }
 }


      </source>


Use Color Matrix to gray the image

<source lang="csharp">

 using System;
 using System.Drawing;
 using System.Drawing.Drawing2D;
 using System.Collections;
 using System.ruponentModel;
 using System.Windows.Forms;
 using System.Data;
 using System.Drawing.Imaging;
 public class Form1 : System.Windows.Forms.Form
 {
   public Form1()
   {
     InitializeComponent();
   }
   private void InitializeComponent()
   {
     this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
     this.ClientSize = new System.Drawing.Size(292, 273);
     this.Text = "";
     this.Resize += new System.EventHandler(this.Form1_Resize);
     this.Paint += new System.Windows.Forms.PaintEventHandler(this.Form1_Paint);
   }
   static void Main() 
   {
     Application.Run(new Form1());
   }
   private void Form1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
   {      
     Graphics g = e.Graphics;
     Bitmap bmp = new Bitmap("winter.jpg");
     g.FillRectangle(Brushes.White, this.ClientRectangle);
     // Create a color matrix
     // The value 0.6 in row 4, column 4 specifies the alpha value
     float[][] matrixItems = {
                               new float[] {1, 0, 0, 0, 0},
                               new float[] {0, 1, 0, 0, 0},
                               new float[] {0, 0, 1, 0, 0},
                               new float[] {0, 0, 0, 0.6f, 0}, 
                               new float[] {0, 0, 0, 0, 1}};
     ColorMatrix colorMatrix = new ColorMatrix(matrixItems);
     // Create an ImageAttributes object and set its color matrix
     ImageAttributes imageAtt = new ImageAttributes();
     imageAtt.SetColorMatrix(
       colorMatrix,
       ColorMatrixFlag.Default,
       ColorAdjustType.Bitmap);
     // Now draw the semitransparent bitmap image.
     g.DrawImage(bmp, this.ClientRectangle, 0.0f, 0.0f, bmp.Width, bmp.Height, 
                 GraphicsUnit.Pixel, imageAtt);
     imageAtt.Dispose();
   }
   private void Form1_Resize(object sender, System.EventArgs e)
   {
     Invalidate();
   }
 }


      </source>