C#中級 コーディング例

G1)滑らかサインウェーブ
G2)単一色ペイント
   (スタック方式)
G3)ギザトゲ楕円
G4)ナミモク四角

C1)マウス移動可能パネル

この講座は中級者用です。
「using」「Form」等は、省略しています。

















C#中級 コーディング例

G2)単一色ペイント(スタック方式)



画像中の1色を設定した別の色に塗り替えます。


     //workBmp:対象ビットマップ画像
     //getPoint:マウスクリックした位置
     //paintColor:塗り替える色
     public Bitmap Paint(Bitmap workBmp, Point getPoint, Color paintColor)
    {
       //マウスクリックした位置の色を取得
         Color getColor = workBmp.GetPixel(getPoint.X, getPoint.Y);
         Point paintStartPoint = new Point(getPoint.X, getPoint.Y);//塗り始める位置
         //塗る領域の設定
         int startPosition_X = 0;
         int startPosition_Y = 0;
         int endX = workBmp.Width;
         int endY = workBmp.Height;
         //取得した色と塗る色が同色の場合戻る
         if (getColor == paintColor) { return workBmp; }
         //作業位置をプッシュ
         Stack<Point> pixels = new Stack<Point>();
         pixels.Push(paintStartPoint);
         //連続作業
         while (pixels.Count > 0)
        {
             Point a = pixels.Pop();
             if (a.X < endX && a.X >= startPosition_X && a.Y < endY && a.Y >= startPosition_Y)
            {
                 if (workBmp.GetPixel(a.X, a.Y) == getColor)
                {
                     workBmp.SetPixel(a.X, a.Y, paintColor);
                     pixels.Push(new Point(a.X - 1, a.Y));
                     pixels.Push(new Point(a.X + 1, a.Y));
                     pixels.Push(new Point(a.X, a.Y - 1));
                     pixels.Push(new Point(a.X, a.Y + 1));
                }
            }
        }
         return workBmp;//処理済み画像を返す
    }