こんにちは。初投稿です。よろしくおねがいいたします
当方VB6を使用しています
以下のようなコードを作成いたしました。
Private Declare Function BitBlt Lib "gdi32" (ByVal hDestDC 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 dwRop As Long) As Long
Dim f As Integer
Private Sub Command1_Click()
Dim i As Integer, n As Integer
Dim i2 As Integer, n2 As Integer
f = 0
If Image1.Width Mod 32 = 0 Then
n = Image1.Width \ 32
Else
n = Image1.Width \ 32 + 1
End If
If Image1.Height Mod 32 = 0 Then
n2 = Image1.Height \ 32
Else
n2 = Image1.Height \ 32 + 1
End If
Debug.Print Dir(App.Path & "\put"), n, n2
If Dir(App.Path & "\put") = Null Then MkDir App.Path & "\put"
For i = 0 To n
For i2 = 0 To n2
DoEvents
BitBlt Picture2.hDC, (i * 32), (i2 * 32), (i * 32 + 32), (i2 * 32 + 32), Picture1.hDC, 0, 0, vbSrcCopy
f = f + 1
Picture2.Refresh
'Exit Sub
SavePicture Picture2.Image, App.Path & "\put\" & Trim(Str(f)) & ".bmp"
lbf.Caption = f
Next i2
Next i
End Sub
Private Sub Command2_Click()
CommonDialog1.ShowOpen
Set Image1.Picture = LoadPicture(CommonDialog1.FileName)
Picture1.Picture = Image1.Picture
End Sub
ですが、 画像の一番左上の32*32だけが 保存されてしまいます。
Picture2 は width = 32 Height = 32 ボーダー無し です。
これは、RPG等のマップチップを一つ一つに分解するプログラムになります。
よろしくお願いいたします。
Picture2の大きさを変えてループの中で1度ずつとめて見たところ、
取得した画像の下に次に取得した画像が追加されていることがわかりました。
BitBlt Picture2.hDC, (i * 32), (i2 * 32), (i * 32 + 32), (i2 * 32 + 32), Picture1.hDC, 0, 0, vbSrcCopy
で、0,0に指定してあるはずなのに、こうなるのはなぜでしょうか・・・
あれ?
Bitbltの第2〜第5引数って、出力先の座標&幅じゃなかったっけ…
レスありがとうございます。
どうやらヘルプを読み違えていたようです。
ありがとうございました
ツイート | ![]() |