【Class Library】


円・楕円グラデーション

 直線グラデーションと処理内容は、ほとんど変わりません。直線を描くか 円を描くかの違いのみです。
 クラスの処理は、大きく2つの部分に分かれ、1つは色の指定処理・ もう一つはグラデーション描画処理です。 (色の指定処理ついては直線グラデーションと同様のものを使用します) 通常、色の指定処理プロシージャ→グラデーション描画処理プロシージャ の順番で呼び出します。


★クラス内の処理内容★

 クラス中の色に関してのグローバル変数を定義しておきます。

Dim r1 As Long, g1 As Long, b1 As Long 'r,g,b値の初期値
Dim r2 As Long, g2 As Long, b2 As Long 'r,g,b値の終了値
'r,g,b値の1カウントごとの変化値
Dim rm As Single, gm As Single, bm As Single

 そのグローバル変数の初期化処理を次のプロシージャで行います。

Private Sub Class_Initialize()
    r1 = 0&: g1 = 0&: b1 = 255&
    r2 = 255&: g2 = 255&: b2 = 255&
    rm = 1!: gm = 1!: bm = 0!
End Sub

以下、処理の中核部分です。 SetGradColorプロシージャが、色の設定を行うプロシージャで、 DrawGradCircleプロシージャが、円・楕円グラデーションを描くプロシージャです。

'============================================================
'DrawGraduC   中心(cx,cy)の円・楕円グラデーションを描く
'------引数--------------------------------------------------
'Pic        描画領域のオブジェ
'cx,cy      描画開始位置
'radius1,radius2   描画半径領域
'gapr   描画向き、1カウントごとの飛び
'aspect   縦横比(1の時円を描く)
'------注意--------------------------------------------------
'radius10:radius1>radius2→gapr<0
'============================================================
Public Sub DrawGradCircle(Pic As Object, _
                    cx As Long, cy As Long, _
                    radius1 As Long, radius2 As Long, _
                    gapr As Long, aspect As Single)
    Dim r As Long, g As Long, b As Long
    Dim i As Long
    Dim temp As Long
    Dim oldDrawWid As Long
    oldDrawWid = Pic.DrawWidth
    'DrawWidth = 1 では描画されない部分がある
    Pic.DrawWidth = 2
    r = r1: g = g1: b = b1
    For i = 0& To Abs(radius2 - radius1)
        If Abs(r - r2) >= Abs(rm) Then r = r1 + CLng(rm * CSng(i))
        If Abs(g - g2) >= Abs(gm) Then g = g1 + CLng(gm * CSng(i))
        If Abs(b - b2) >= Abs(bm) Then b = b1 + CLng(bm * CSng(i))
        temp = i * gapr + Abs(radius1)
        '軽いエラートラップ
        If temp < 0& Then Exit For
        Pic.Circle (cx, cy), temp, RGB(r, g, b), , , aspect
        DoEvents
    Next i
    Pic.DrawWidth = oldDrawWid
End Sub


★クラスの使用法★

 あるグラデーション描画パターンです。Picture1オブジェに青グラデーションを描画します。

    Dim cgc As New CGradC
    Call cgc.SetGradColor(0&, 0&, 120&, _
        255&, 255&, 255&, 1!, 1!, 2!)
    Call cgc.DrawGradCircle(Picture1, 150&, 150&, 0&, 50&, 1&, 1)


(サンプルプログラムの動作確認)

機種 PC-9821V13S
OS Windows95
開発ツール Visual Basic Ver.4.0
更新日 00/3/3

ダウンロード GradC.lzh(2.56KB)

Visual Basic Ver.5.0,Ver6.0でも問題なく動作すると思います。
なお、このコーナーに掲載されているプログラムコード、およびプログラムファ イルが原因で起きた損害などに関して一切の責任を負うことはできません。

★このコーナーに掲載されているプログラムコード、およびプログラムファ イルを無断で配布・転載することは、原則として禁止です。


Class Libraryインデックス トップページ


Copyright(C)2000 Tomoya. All rights reserved.