画像をBitBltで分解・保存するコードを作ったのですが…

解決


あきら  2005-09-11 01:04:25  No: 92199

こんにちは。初投稿です。よろしくおねがいいたします
当方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等のマップチップを一つ一つに分解するプログラムになります。
よろしくお願いいたします。


あきら  2005-09-11 01:13:11  No: 92200

Picture2の大きさを変えてループの中で1度ずつとめて見たところ、
取得した画像の下に次に取得した画像が追加されていることがわかりました。
BitBlt Picture2.hDC, (i * 32), (i2 * 32), (i * 32 + 32), (i2 * 32 + 32), Picture1.hDC, 0, 0, vbSrcCopy
で、0,0に指定してあるはずなのに、こうなるのはなぜでしょうか・・・


ガッ  2005-09-11 02:46:57  No: 92201

あれ?
Bitbltの第2〜第5引数って、出力先の座標&幅じゃなかったっけ…


あきら  2005-09-11 04:10:26  No: 92202

レスありがとうございます。
どうやらヘルプを読み違えていたようです。
ありがとうございました


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加