【C#】PictureBoxの画像を色反転するボタンを追加する【ペイントアプリ】
using System; using System.Drawing; using System.Windows.Forms; namespace ImageEditing { public partial class frmPaintTool : Form { // 変数 // ビットマップ画像 Bitmap _newBitMap; // マウスクリック中のフラグ bool _mouseDrug; // 前のマウスカーソルのX、Y座標 int _prevX; int _prevY; public frmPaintTool() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { // Bitmapオブジェクトを生成する _newBitMap = new Bitmap(DrawingPicBox.Width, DrawingPicBox.Height); // Bitmap画像の背景を白で塗りつぶす Graphics objGrp = Graphics.FromImage(_newBitMap); SolidBrush objBrush = new SolidBrush(Color.White); objGrp.FillRectangle(objBrush, 0, 0, _newBitMap.Width, _newBitMap.Height); objGrp.Dispose(); objBrush.Dispose(); } private void DrawingPicBox_MouseDown(object sender, MouseEventArgs e) { // マウスクリック開始判定 _mouseDrug = true; // マウスカーソル位置記憶の初期化 _prevX = e.Location.X; _prevY = e.Location.Y; } private void DrawingPicBox_MouseUp(object sender, MouseEventArgs e) { // マウスクリック終了判定 _mouseDrug = false; } private void DrawingPicBox_MouseMove(object sender, MouseEventArgs e) { // マウスクリック中に、BitMapにGraphicsオブジェクトで描画する if (_mouseDrug == true) { // BitMapからGraphicsオブジェクトを生成 //描画に利用するペンの色、太さを設定 //指定したペンでマウスの位置に線を引く Graphics objGrp = Graphics.FromImage(_newBitMap); Pen objPen = new Pen(Color.Black, 3); objGrp.DrawLine(objPen, _prevX, _prevY, e.Location.X, e.Location.Y); _prevX = e.Location.X; _prevY = e.Location.Y; objPen.Dispose(); objGrp.Dispose(); // BitMapオブジェクトをPictureBoxに表示する DrawingPicBox.Image = _newBitMap; } } } private void btnReverse_Click(object sender, EventArgs e) { // 「色反転」ボタンが押されたとき // ネガティブイメージを作成する _newBitMap = (Bitmap)CreateNegativeImage(_newBitMap); DrawingPicBox.Image = _newBitMap; } // 色反転の処理 private Image CreateNegativeImage(Image img) { //ネガティブイメージの描画先となるImageオブジェクトを作成する Bitmap negaImg = new Bitmap(img.Width, img.Height); //negaImgのGraphicsオブジェクトを取得 Graphics g = Graphics.FromImage(negaImg); //ColorMatrixオブジェクトの作成 ColorMatrix cm = new ColorMatrix(); cm.Matrix00 = -1; cm.Matrix11 = -1; cm.Matrix22 = -1; cm.Matrix33 = 1; cm.Matrix40 = cm.Matrix41 = cm.Matrix42 = cm.Matrix44 = 1; //ImageAttributesを使用して色が反転した画像を描画する //ImageAttributesオブジェクトを作成する ImageAttributes ia = new ImageAttributes(); //ColorMatrixを設定する ia.SetColorMatrix(cm); g.DrawImage(img, new Rectangle(0, 0, img.Width, img.Height), 0, 0, img.Width, img.Height, GraphicsUnit.Pixel, ia); //リソースを解放する g.Dispose(); return negaImg; } }
参考にしたサイトです