PictureBox コントロールで画像を拡大・縮小 |
PictureBox コントロールで画像を拡大・縮小 及び JPG形式で保存 (027) | |
画像の拡大・縮小表示だけなら Image コントロールを使った方が簡単ですが、表示した画像 ファイルを保存したり、又、拡大・縮小、画像の回転等の機能を付加使用とするとImage コントロールでは、できません。 そこで、PictureBox コントロールで画像の拡大・縮小を実施し、表示した画像を圧縮率を 指定して、JPG形式で保存する事にしました。 BMP・JPG ファイルをJPG形式に変換して保存するDLL [明熊JPEG保存DLL V.3.10]を 使用する事で、VBからでも簡単にJPG形式で圧縮して画像を保存できます。 別途DLLは 明熊工房さん でダウンロードして、WindowsのSystem32(System) フォルダーへ入れて置いて下さい。 DLLの詳しい使用方法は添付されているファイルをご覧下さい。 上記DLLは Vector にもUPしてありますが、ご使用時はご自分の責任の元で実施願います。 Option Explicit 'SampleNo=027 WindowsXP VB6.0(SP5) 2002.04.29 Private ZoomSize As Integer '拡大縮小率 '別途コントロールのプロパティで設定でも可 Private Sub Form_Load() Form1.WindowState = vbMaximized Form1.ScaleMode = vbPixels With Picture1 '元の画像の表示用 .AutoSize = True .ScaleMode = vbPixels Set .Picture = LoadPicture("image.jpg") .Visible = False '元の画像は非表示に設定 End With With Picture2 '作業用 .AutoSize = True .ScaleMode = vbPixels .AutoRedraw = True 'Set .Picture = LoadPicture("image.jpg") .Move 10, 10 End With ZoomSize = 100 End Sub Private Sub sZoom(ZoomS As Integer) Dim p1sw As Long 'Picture1.ScaleWidth Dim p1sh As Long 'Picture1.ScaleHeight Dim p1w As Long 'Picture1.Width Dim p1h As Long 'Picture1.Height '元の画像サイズを取得して、拡大縮小サイズを求める With Picture1 p1sw = .ScaleWidth * (ZoomS / 100) p1sh = .ScaleHeight * (ZoomS / 100) p1w = .Width p1h = .Height End With 'コピー先のサイズを設定する With Picture2 '枠のサイズを考慮して .Height = p1h * (ZoomS / 100) - (.Height - .ScaleHeight) .Width = p1w * (ZoomS / 100) - (.Width - .ScaleWidth) '元画像をサイズ変更して Picture2 にコピー .PaintPicture Picture1.Picture, 0, 0, p1sw, p1sh End With End Sub Private Sub mnuEnlarge_Click() 'クリック毎に10%づつ拡大 ZoomSize = ZoomSize + 10 If ZoomSize > 200 Then ZoomSize = 200 End If Call sZoom(ZoomSize) End Sub Private Sub mnuReduce_Click() 'クリック毎に10%づつ縮小 ZoomSize = ZoomSize - 10 If ZoomSize < 50 Then ZoomSize = 50 End If Call sZoom(ZoomSize) End Sub 保存設定 フォームの宣言セクションに記入して下さい。 'JPG形式で保存するDLL (保存の必要がなければいりません) Private Declare Function DCSavetoJPEG Lib "SaveJPG.DLL" _ (ByVal srchDC As Long, ByVal srcWidth As Long, _ ByVal srcHeight As Long, ByVal jpgf As String, _ ByVal Value As Byte, ByVal Prgr As Boolean) As Integer 保存のメニューを作成し Private Sub FileSave_Click() Dim Ret As Integer '画質の設定70で "image_01.jpg" へ保存 With Picture2 Ret = DCSavetoJPEG(.hDC, .ScaleWidth, .ScaleHeight, _ "image_01.jpg", 70, False) End With 'srchDCはJPEGに保存したいコントロールのデバイスコンテキストのハンドル 'srcWidthは、変換元の幅(ピクセル単位) 'srcHeightは、変換元の高さ(ピクセル単位) 'jpgfは保存するJPGファイル名(フルパス)、 'Valueは、画質の設定で、1から100まで設定可能です。 'Prgrsは、プログレッシブタイプで保存するかどうか(True か False) 'BMP・JPGファイルをJPG形式に変換して保存するDLL[明熊JPEG保存DLLV.3.10] 'を使用する事で、VBからでも簡単にJPG形式で圧縮して画像を保存できます。 '別途DLLは 明熊工房さん http://www.akikuma.cx/ でダウンロードして 'WindowsのSystemフォルダーへ入れて置いて下さい。 'DLLの詳しい使用方法は添付されているファイルをご覧下さい。 End Sub |
2002/04/29