0

3つまたは4つの組み込みプロパティのいずれかを使用せずにVBで画像を比例的に拡大縮小することは可能ですか(それらはあまりうまく機能しないため)?

私が言及しているのは、次のようにJavaで実行できることです。

Image newimg = img.getScaledInstance(230, 310,  java.awt.Image.SCALE_SMOOTH);  

Javaでは、上記の行は、指定されたサイズに合うようにディメンションをスケーリングするためにうまく機能しているようです。

4

1 に答える 1

0

私はより良い品質のサイズ変更を達成するために使用した UserControl を持っていました。以下はその抜粋です。お役に立てば幸いです。

Private Const STRETCH_ANDSCANS = 1
Private Const STRETCH_DELETESCANS = 3
Private Const STRETCH_HALFTONE = 4
Private Const STRETCH_ORSCANS = 2
Private Const SRCCOPY = &HCC0020

Private Declare Function StretchBlt Lib "gdi32" (ByVal hdc As Long, _
                                                   ByVal x As Long, _
                                                   ByVal y As Long, _
                                                   ByVal nWidth As Long, _
                                                   ByVal nHeight As Long, _
                                                   ByVal hSrcDC As Long, _
                                                   ByVal xSrc As Long, _
                                                   ByVal ySrc As Long, _
                                                   ByVal nSrcWidth As Long, _
                                                   ByVal nSrcHeight As Long, _
                                                   ByVal dwRop As Long) _
                                                   As Long

Private Declare Function SetStretchBltMode Lib "gdi32" (ByVal hdc As Long, _
                                                      ByVal nStretchMode As Long) _
                                                      As Long

そして、それは次のように呼び出されました:

Private Sub UserControl_Paint()

   Dim lSave As Long

   'set the stretchblit mode (saving the previous value)
   lSave = SetStretchBltMode(UserControl.hdc, STRETCH_HALFTONE)

   'perform blit
   Call StretchBlt(UserControl.hdc, 0, 0, UserControl.ScaleWidth, _
                     UserControl.ScaleHeight, picBuffer.hdc, 0, 0, _
                     picBuffer.ScaleWidth, picBuffer.ScaleHeight, SRCCOPY)

   'restore previous mode
   Call SetStretchBltMode(UserControl.hdc, lSave)

End Sub
于 2012-11-07T13:10:32.400 に答える