タイトル | : Re: うまくExtFloodFillが使用できません |
記事No | : 8491 |
投稿日 | : 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様本当にありがとうございました。
|