画像ファイルを拡大、回転させる方法

◆概要

 このページは、Visual Basic 6.0で、画像ファイルを拡大、回転させる方法について記載しています。

 画像ファイルを表示し、拡大や回転などの編集を行うアプリケーションを作成する場合があると思います。そこで今回は、画像ファイルの読み込みと保存方法、さらに、拡大や回転などの画像ファイルの変形方法について紹介します。今回は、図1 のようにフォーム内に 2 つのコントロールを貼り付け、フォームの Load 時に画像ファイルを表示します。そして、コントロールに表示された画像を保存したり、拡大・縮小、回転などを実装したりするアプリケーションを作成します。


図1

図1

◆詳細

Visual Basic 6.0 で画像ファイルを表示する場合、 PictureBox コントロール、または Image コントロールを使用します。 PictureBox コントロールと Image コントロールは、共に、ビットマップ、アイコン、メタファイル、jpeg ファイル、gif ファイルを表示することができます。しかし、 Image コントロールでは、表示した画像の保存や画像の回転などを実装することができません。そのため、画像ファイルの保存を実装したい場合には PictureBox コントロールを使用します。

◆Sample

 フォーム (図1) に PictureBox コントロール (右) と Image コントロール (左) を貼り付けます。
画像ファイルを読み込む場合は LoadPicture 関数を使用し、保存する場合は SavePicture 関数を使用します。実装コードは以下のとおりです。

リスト1

Option Explicit

Dim fileName As String

Private Sub Form_Load()
    fileName = "C:\image.bmp"
    Image1.Picture = LoadPicture(fileName)
    Picture1.Picture = LoadPicture(fileName)

End Sub

Private Sub Command1_Click()
    SavePicture Picture1.Picture, "C:\image.jpg"
End Sub

 「Image1.Picture = LoadPicture(fileName)」と「Picture1.Picture = LoadPicture(fileName)」で、 C ドライブの image.bmpファイルを読み込み、Image1 と Picture1 に表示します (図1)。「SavePicture Picture1.Picture, "C:\image.jpg"」で、Picture1 に表示されている画像を jpg 形式で C ドライブに保存します。

続いて、PictureBox コントロールに表示された画像を拡大・縮小、回転する方法について紹介します。Visual Basic 6.0 で、画像の拡大・縮小や回転を行う場合、PaintPicture 関数を使用します。実装コードは以下のとおりです。

リスト2

Private Sub MenuExpansion200_Click()
    With Picture1
        .Picture = Nothing  ' Pictureボックスの画像を消去
        .Cls
        ' Image1の画像を2倍にしてPictureボックスに表示
        .PaintPicture Image1.Picture, 0, 0, _
        Image1.Parent.ScaleWidth * 2, _
        Image1.Parent.ScaleHeight * 2, 0, 0, _
        Image1.Parent.ScaleWidth, Image1.Parent.ScaleHeight
    End With

End Sub

Private Sub MenuExpansion50_Click()
    With Picture1
        .Picture = Nothing  ' Pictureボックスの画像を消去
        .Cls
        ' Image1の画像を0.5倍にしてPictureボックスに表示
        .PaintPicture Image1.Picture, 0, 0, _
        Image1.Parent.ScaleWidth * 0.5, _
        Image1.Parent.ScaleHeight * 0.5, 0, 0, _
        Image1.Parent.ScaleWidth, Image1.Parent.ScaleHeight
    End With

End Sub

Private Sub menuRotate_Click()
    With Picture1
        .Picture = Nothing  ' Pictureボックスの画像を消去
        .Cls
        ' 画像を180度回転
        .PaintPicture Image1.Picture, Image1.Picture.Width, _
                Image1.Picture.Height, _
                -Image1.Picture.Width, -Image1.Picture.Height
    End With

End Sub

リスト2 のように、画像の拡大・縮小は、PaintPicture 関数を使用して、Image1 に表示されている画像のサイズを変更し Picture1 にコピーします。「.PaintPicture Image1.Picture, 0, 0, Image1.Parent.ScaleWidth * 2, Image1.Parent.ScaleHeight * 2, 0, 0, Image1.Parent.ScaleWidth, Image1.Parent.ScaleHeight」では 200% (2倍) 拡大し、「.PaintPicture Image1.Picture, 0, 0, Image1.Parent.ScaleWidth * 0.5, Image1.Parent.ScaleHeight * 0.5, 0, 0, Image1.Parent.ScaleWidth, Image1.Parent.ScaleHeight」では、50%縮小 (0.5倍に拡大) します。また、「.PaintPicture Image1.Picture, Image1.Picture.Width, Image1.Picture.Height, -Image1.Picture.Width, -Image1.Picture.Height」で、Image1 の画像を 180 度回転させ Picture1 にコピーします。


上記 (リスト2) を実装し、[変形]メニューの[拡大200%]を選択すると、Image1 の 2 倍に拡大し Picture1 に表示されます (図2)。

図2
図2


変形]メニューの[回転]を選択すると、図3 のように Image1 の画像が 180 度に回転表示されます。

図3
図3


今回、画像の回転に PaintPicture 関数を使いましたが、 Win32API の GetPixel 関数と SetPixel 関数を使用することで、より細かな角度で表示することができます。



▼ページトップへ