ピクチャーを回転して表示(その1) |
ピクチャーを回転して表示(90度毎 角度指定) (085) | |
Option Explicit 'SampleNo=085 WindowsXP VB6.0(SP5) 2002.05.17
Private Sub Form_Load() Dim i As Integer For i = 0 To 4 'ピクセル単位に設定 Picture1(i).ScaleMode = 3 Next i End Sub Private Sub Command1_Click() Dim co1 As Double, co2 As Double, co3 As Double, co4 As Double Dim si1 As Double, si2 As Double, si3 As Double, si4 As Double Dim x1 As Long, x2 As Long, x3 As Long, x4 As Long Dim y1 As Long, y2 As Long, y3 As Long, y4 As Long Dim x As Long, y As Long Dim c As Long Dim i As Integer co1 = Cos(1.57) '90 * 3.1417 / 180 si1 = Sin(1.57) co2 = Cos(3.14) '180 * 3.1417 / 180 si2 = Sin(3.14) co3 = Cos(4.71) '270 * 3.1417 / 180 si3 = Sin(4.71) co4 = Cos(0.785) '45 * 3.1417 / 180 si4 = Sin(0.785) 'コントロールの中心を原点(0,0)に設定 '正方形で割り切れる寸法が望ましい Picture1(0).ScaleLeft = -Picture1(0).ScaleWidth \ 2 Picture1(0).ScaleTop = -Picture1(0).ScaleHeight \ 2 Picture1(1).ScaleLeft = -Picture1(1).ScaleWidth \ 2 Picture1(1).ScaleTop = -Picture1(1).ScaleHeight \ 2 Picture1(2).ScaleLeft = -Picture1(2).ScaleWidth \ 2 Picture1(2).ScaleTop = -Picture1(2).ScaleHeight \ 2 Picture1(3).ScaleLeft = -Picture1(3).ScaleWidth \ 2 Picture1(3).ScaleTop = -Picture1(3).ScaleHeight \ 2 Picture1(4).ScaleLeft = -Picture1(4).ScaleWidth \ 2 Picture1(4).ScaleTop = -Picture1(4).ScaleHeight \ 2 '一旦ピクチャーをクリヤ For i = 1 To 4 Set Picture1(i).Picture = LoadPicture() Next i For x = -Picture1(0).ScaleWidth \ 2 To Picture1(0).ScaleWidth \ 2 For y = -Picture1(0).ScaleHeight \ 2 To Picture1(0).ScaleHeight \ 2 x1 = x * co1 - y * si1 y1 = x * si1 + y * co1 x2 = x * co2 - y * si2 y2 = x * si2 + y * co2 x3 = x * co3 - y * si3 y3 = x * si3 + y * co3 x4 = x * co4 - y * si4 y4 = x * si4 + y * co4 '図のカラー情報の読み取り c = Picture1(0).Point(x, y) '読み取ったカラー情報を角度を変更して描画 If c <> -1 Then Picture1(1).PSet (x1, y1), c Picture1(2).PSet (x2, y2), c Picture1(3).PSet (x3, y3), c Picture1(4).PSet (x4, y4), c End If Next y Next x End Sub |
|
結 果 90度単位の回転はほぼ正確な位置に回転できますが45度のようになると誤差の為に正確な位置に回転できず、塗り残しができご覧の通りの図になる (隣接する個所の色情報を平均化して補間してやれば、ほぼ綺麗な画像になるかと思います) |
|
ピクチャーボックスに描いた画像等は AutoRedraw プロパティをTrue に設定しておかないとフォームの後ろ等に隠れたりした時画像が消えます。 ビットマップファイル等をロードして表示したものは、消えません。 |