1

このクラスを使用して、LockBits 関数に基づいてビットマップのピクセルを塗りつぶしています。

Imports System.Drawing.Imaging
Imports System.Runtime.InteropServices.Marshal

Public Class Fill

    Public Shared Function Process(ByVal b As Bitmap) As Bitmap

    Dim bmd As BitmapData = _
    b.LockBits(New Rectangle(0, 0, b.Width, b.Height), _
    System.Drawing.Imaging.ImageLockMode.ReadWrite, PixelFormat.Format32bppArgb)

    Dim scan0 As IntPtr = bmd.Scan0
    Dim stride As Integer = bmd.Stride

    ' Here's the speedier method.
    ' define an array to store each pixels color as an int32 
    Dim pixels(b.Width * b.Height - 1) As Integer

    ' this is system.runtime.interopservices.marshall.copy
    Copy(scan0, pixels, 0, pixels.Length)

    ' loop through all pixels and fill

    For i As Integer = 0 To pixels.Length - 1
        pixels(i) = Color.Red.ToArgb
    Next

    ' Copy the data back from the array to the locked memory
    Copy(pixels, 0, scan0, pixels.Length)

    ' finally we unlock the bits. 
    b.UnlockBits(bmd)
    Return b
    End Function
End Class

ここで、すべてのピクセルを塗りつぶす代わりに、楕円を塗りつぶす必要があります (実際には多くの楕円になるので、LockBits を使用します)。そのため、ある種の数式を使用してピクセルごとに楕円を描画する方法を探しました。しかし、私はあまり助けを見つけられませんでした。また、私はこの数学が苦手です。だから、私の質問は次のとおりです。塗りつぶされた楕円を形成するピクセルの配列を作成する方法は? ありがとうございました

.

補足 (無視してかまいません):

私がやろうとしていることを正確に説明しますので、私の状況を理解するのに役立つかもしれません..ビットマップの特定の領域、塗りつぶされたピクセルはその領域のピクセルの総数の割合を持っている必要がありますが、そのため、楕円をピクセルごとに (またはピクセルの配列を使用して) 描画して、その数を追跡する必要があります。塗りつぶされたピクセル。

4

1 に答える 1