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