StretchBlt     
画像の拡大/縮小、水平/垂直方向の反転など

☆宣言
'▼APIの宣言
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

'▼定数の宣言
Global Const SRCCOPY = &HCC0020    'そのまま転送
Global Const SRCAND = &H8800C6     '転送先の画像とAND演算して転送
Global Const SRCPAINT = &HEE0086   '転送先の画像とOR演算して転送
Global Const SRCINVERT = &H660046  '背景を反映して色を反転して転送
Global Const NOTSRCCOPY = &H330008 '色を反転して転送
☆使用例と使用例のパラメータ
Ret = StretchBlt(Picture2.hDC, 0, 0, 200, 200, _
Picture1.hDC, 0, 0, pw, ph, SRCCOPY)
Ret…関数が成功したかどうかが返ります。
  0以外…関数成功
  0    …関数失敗
Picture1.hDC…転送先のデバイスコンテキスト
100…転送される位置のX座標
100…転送される位置のY座標
200…転送後の画像の幅
200…転送後の画像の高さ
Picture2.hDC…転送元のデバイスコンテキスト
0…転送元における転送する部分の左上のX座標
0…転送元における転送する部分の左上のY座標
100…転送する画像の幅
100…転送する画像の高さ
SRCCOPY…転送方法

☆転送方法
SRCCOPY…そのまま転送
SRCAND…転送先の画像とAND演算して転送
SRCPAINT…転送先の画像とOR演算して転送
SRCINVERT…転送先の画像とXOR演算して転送
NOTSRCCOPY…色を反転して転送

☆反転する場合
画像の転送先の幅もしくは高さを負の値にすることによって
その方向が反転されて転送されます。
それから、転送される位置というのは下の矢印の
始点と考えて下さい。
普通の転送普通の転送

上下反転の転送上下反転の転送

上下左右反転の転送上下左右反転の転送

ただし、転送先の左上の座標のうち反転した方の軸の値は
1をひいて下さい。そうしないと1ドットその方向がずれます。


転送元と転送先のScaleModeは「3-ピクセル」に
することをお勧めします。
自分自身には転送できないので、自分自身に転送する
場合は、一旦他に転送してから転送しなおして下さい。

転送元のPictureのAutoRedrawはTrueにしておいて下さい。

サンプルプログラムを見て頂ければ、わかりやすいかと思います。↓
☆サンプルプログラム
strblt.lzh (9.90KB)


Directory Reference
Top page
 Visual Basic Room
  Windows API (戻る)
   StretchBlt