tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
[ツリー表示へ]  [ワード検索]  [Home]

タイトル Re: うまくExtFloodFillが使用できません
投稿日: 2008/12/22(Mon) 12:04
投稿者のうち
   Public Function ExtFloodFill_test(ByVal bmp As Bitmap, ByVal hp As Point) As Bitmap

        '元DCと互換DCの作成
        Dim srcDC As IntPtr = CreateCompatibleDC(IntPtr.Zero)
        Dim dstDC As IntPtr = CreateCompatibleDC(IntPtr.Zero)
        Dim dstBMI As BITMAPINFOHEADER

        With dstBMI
            .biBitCount = 24
            .biHeight = bmp.Height
            .biSize = System.Runtime.InteropServices.Marshal.SizeOf(dstBMI)
            .biWidth = bmp.Width
            .biPlanes = 1
        End With

        'ソース画像からハンドルの取得
        Dim get_hbmp As IntPtr = bmp.GetHbitmap

        '元DCに元ソースを選択する。
        Dim Obmp As IntPtr = SelectObject(srcDC, get_hbmp)

        Dim dstbits As IntPtr
        'DIB(デバイスに依存しないbitmap)を作成する
        Dim dstBMP As IntPtr = CreateDIBSection(dstDC, dstBMI, 0, dstbits, 0, 0)

        '互換DCにDIBを選択する。
        Dim Obmp2 As IntPtr = SelectObject(dstDC, dstBMP)

        '元DCから互換DCにコピー
        BitBlt(dstDC, 0, 0, bmp.Width, bmp.Height, srcDC, 0, 0, SRCCOPY)
        GdiFlush()
        '塗りつぶす色
        Dim mBrush As IntPtr = CreateSolidBrush(System.Drawing.ColorTranslator.ToWin32(Color.White))
        '互換DCに作成したブラシを選択する。
        Dim hmm As IntPtr = SelectObject(dstDC, mBrush)
        '互換DCExtFloodFillを使用する
        ExtFloodFill(dstDC, 0, 0, GetPixel(dstDC, 0, 0), 1)
        '戻り値に結果をセットする。
        ExtFloodFill_test = Bitmap.FromHbitmap(dstBMP)

        '使用したものを解放する
        DeleteObject(mBrush)
        DeleteObject(SelectObject(dstDC, mBrush))
        DeleteObject(SelectObject(dstDC, dstBMP))
        DeleteObject(SelectObject(srcDC, get_hbmp))
        DeleteObject(hmm)
        DeleteObject(dstbits)
        DeleteObject(Obmp2)
        DeleteObject(Obmp)
        DeleteObject(dstBMP)
        DeleteDC(dstDC)
        DeleteDC(srcDC)
        get_hbmp = Nothing
        hmm = Nothing
        dstbits = Nothing
        Obmp2 = Nothing
        Obmp = Nothing
        dstBMP = Nothing
        dstDC = Nothing
        srcDC = Nothing
        dstBMI = Nothing

    End Function

よねKEN様に提示していただいたサイトのソースを元に上記のようなコードになりました。
無事、私の思っていた結果を出すことができるコードを書くことが出来ました。
ご返信していただいたよねKEN様、Hongliang様本当にありがとうございました。

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。