課題1 モザイク加工

モノクロのプログラムを参考に8×8の枡目でモザイク加工するプログラムを作成する
先生に見せて動作確認ができればよい。

課題2 bitmapに直線を引く関数Lineを作る

描画はSetPixel関数を使い、アルゴリズムの解説付きでレポート提出

Filename: キャンバスとなるbitmapを作成しPictureBox1にはめ込む

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim bm As Bitmap
        Dim g As Graphics
        Dim gpath As Drawing2D.GraphicsPath = New Drawing2D.GraphicsPath
        bm = New Bitmap(600, 600)
        g = Graphics.FromImage(bm)
        gpath.AddRectangle(New Rectangle(0, 0, 599, 599))
        g.FillPath(Brushes.White, gpath)
        PictureBox1.Image = bm
    End Sub

Filename: Lineのひな形

    Private Sub Line(ByVal x0 As Integer, ByVal y0 As Integer, ByVal xn As Integer, ByVal yn As Integer)
        Dim bm As Bitmap
        bm = PictureBox1.Image
'
' ここにプログラム
'
        PictureBox1.Image = bm
    End Sub

Step1 y方向増分を実数で表す。
描画の条件:(xn-x0) > (yn-y0) の範囲で行う。
例)Line(300, 300, 500, 400)

dy=(yn-y0)/(xn-x0)
y=y0
for x = x0 to xn
    点を描く(x,y)
    y= y+dy
next

Step2 整数で処理する

増分を整数に置き換えて速度アップする。

解き方:マスの1辺をxn-x0と考えると、1マスにおけるy方向の増分がyn-y0と考えられます。
dx=xn-x0,dy=yn-y0とおくと、
始点のときey=-dx/2とし、1マス進むごとにey=ey+dyとし、
eyがdxを超えたとき、y=y+1,ey=ey-dxとする。
このyを使って点を描いていきます。
line1.png

Step3 第2事象の場合を追加する。Line(300, 300, 400, 500)の場合を考える

if文でdxとdyを比較してy方向をベースにしたプログラムを追加する