VB.NET2003です。
□□_
□□□
_□□
上図のように、複数の長方形を重ねた図形を作ろうとしています。
複数の長方形は全て同じARGB値で、重なる部分も同じARGB値にしたいと思っています。
(図が完成した後、ほかのBitmapに重ね合わせるため)
そのため、下記のようなコードを書いてみたのですが、
Dim TestBitmap As Bitmap = New Bitmap(500, 500, Imaging.PixelFormat.Format32bppArgb)
Dim sb As SolidBrush = New SolidBrush(Color.FromArgb(128, 0, 0, 255))
Dim g As Graphics = Graphics.FromImage(TestBitmap)
g.FillRectangle(sb, 100, 100, 200, 200)
g.FillRectangle(sb, 200, 200, 200, 200)
□□_
□■□
_□□
このように重なり合う場所だけARGB値も重ねあわされて変わってしまいます。
うまい解決法等ありましたら、教えていただけませんか?
自己解決しました。
Dim TestBitmap As Bitmap = New Bitmap(500, 500, Imaging.PixelFormat.Format32bppArgb)
Dim cms() As Imaging.ColorMap = {New Imaging.ColorMap}
cms(0).OldColor = Color.FromArgb(255, 0, 0, 255)
cms(0).NewColor = Color.FromArgb(128, 0, 0, 255)
Dim ia As New System.Drawing.Imaging.ImageAttributes
ia.SetRemapTable(cms)
Dim sb As SolidBrush = New SolidBrush(cms(0).OldColor)
Dim g As Graphics = Graphics.FromImage(TestBitmap)
g.FillRectangle(sb, 100, 100, 200, 200)
g.FillRectangle(sb, 200, 200, 200, 200)
と、最初は不透過色で描いてから、DrawImageの際に色を透過色に変換することで解決しました。
なお、解決チェックはつけますが、よりスマートな方法がありましたらご教授ください。
> □□_
> □□□
> _□□
> 上図のように、複数の長方形を重ねた図形を作ろうとしています。
『_』の部分が良く分からずに、理解が遅れました。m(_ _)m
(7個の長方形を並べているように見えていたので…)
2 つの矩形を、斜めに重ね合わせたイメージだったのですね。
┏━┓ ┏━┓
┃┌╂┐ ┃ ┗┓
┗┿┛│ ┗┓ ┃
└─┘ ┗━┛
下記のように、GraphicsPathを使ってみては如何でしょう?
Dim gp As New Drawing2D.GraphicsPath(Drawing2D.FillMode.Winding)
gp.AddRectangle(New Rectangle(100, 100, 200, 200))
gp.AddRectangle(New Rectangle(200, 200, 200, 200))
g.Clip = New Drawing.Region(gp)
g.FillRectangle(sb, TestBitmap.GetBounds(GraphicsUnit.Pixel))
試したところ、うまく長方形を重ねた形が描けました。
スマートな方法、ありがとうございました。
ツイート | ![]() |