C#中級 コーディング例

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

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

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

















C#中級 コーディング例

G4)ナミモク四角



ナミナミが付いた四角を描く

       public void MokuRect()
      {
          Bitmap imgBitmap = new Bitmap(600, 600);//pictureBoxのサイズ
          pictureBox.Image = imgBitmap;
          Graphics grf = Graphics.FromImage(imgBitmap);
          Pen pen = new Pen(Color.Red, 0.1f);
         //設定
          float curveHeight = 10;//カーブの高さ
          int segmentWCount = 10;//横片のカーブの数量
          int segmentHCount = 10;//縦片のカーブの仮数量
          PointF startPointF = new PointF(100, 100);//描き始め位置
          PointF endPointF = new PointF(100, 100);//描き終わり仮位置
          int width = 200;//四角幅
          int height = 150;//四角高さ
          float segmentWidth = width / segmentWCount;//横片カーブ幅
         //設定調整
          if (width % segmentWCount != 0) { segmentWidth = (int)(width / segmentWCount); }
          segmentHCount = (int)(height / segmentWidth);
          float segmentHeight = height / segmentHCount;
         //上片
          for (int i = 0; i < segmentWCount; i++)
          {
              float px1 = startPointF.X + i * segmentWidth;
              float py1 = startPointF.Y;
              float px2 = px1 + segmentWidth / 3;
              float py2 = startPointF.Y - curveHeight;
              float px3 = px1 + (segmentWidth * 2 / 3);
              float py3 = py2;
              float px4 = px1 + segmentWidth;
              float py4 = py1;
              endPointF.X = px4;
              endPointF.Y = py4;
              grf.DrawBezier(pen, new PointF(px1, py1), new PointF(px2, py2), new PointF(px3, py3),newPointF(px4, py4));
          }
          grf.DrawLine(pen, endPointF.X, endPointF.Y, startPointF.X + width, startPointF.Y);//繋ぎ

         //右片
          for (int i = 0; i < segmentHCount; i++)
          {
              float px1 = startPointF.X + width;
              float py1 = startPointF.Y + i * segmentHeight;
              float px2 = startPointF.X + width + curveHeight;
              float py2 = py1 + segmentHeight / 3;
              float px3 = px2;
              float py3 = py1 + (segmentHeight * 2 / 3);
              float px4 = px1;
              float py4 = py1 + segmentHeight;
              endPointF.X = px4;
              endPointF.Y = py4;
              grf.DrawBezier(pen, new PointF(px1, py1), new PointF(px2, py2), new PointF(px3, py3),newPointF(px4, py4));
          }
          grf.DrawLine(pen, endPointF.X, endPointF.Y, startPointF.X+width, startPointF.Y+height);//繋ぎ

         //下片
          for (int i = 0; i < segmentWCount; i++)
          {
              float px1 = startPointF.X + width - i * segmentWidth;
              float py1 = startPointF.Y + height;
              float px2 = px1 - segmentWidth / 3;
              float py2 = startPointF.Y + height + curveHeight;
              float px3 = px1 - (segmentWidth * 2 / 3);
              float py3 = py2;
              float px4 = px1 - segmentWidth;
              float py4 = py1;
              endPointF.X = px4;
              endPointF.Y = py4;
              grf.DrawBezier(pen, new PointF(px1, py1), new PointF(px2, py2), new PointF(px3, py3),newPointF(px4, py4));
          }
          grf.DrawLine(pen, endPointF.X, endPointF.Y, startPointF.X, startPointF.Y + height);//繋ぎ

         //左片
          for (int i = 0; i < segmentHCount; i++)
          {
              float px1 = startPointF.X;
              float py1 = startPointF.Y + height - i * segmentHeight;
              float px2 = startPointF.X - curveHeight;
              float py2 = py1 - segmentHeight / 3;
              float px3 = px2;
              float py3 = py1 - (segmentHeight * 2 / 3);
              float px4 = px1;
              float py4 = py1 - segmentHeight;
              endPointF.X = px4;
              endPointF.Y = py4;
              grf.DrawBezier(pen, new PointF(px1, py1), new PointF(px2, py2), new PointF(px3, py3),newPointF(px4, py4));
          }
          grf.DrawLine(pen, endPointF.X, endPointF.Y, startPointF.X, startPointF.Y);//繋ぎ

          pictureBox.Image = imgBitmap;
          grf.Dispose();
      }