0
私は、円形のプログレスバーを表示するコントロールを作った。 制御を以下に示す:2 ARCのとDrawArcがエッジを閉じない
- 制御作品:
- をそれらの一つは、現在の値(青に着色)
- は他方が(残りの値を表示する表示赤色)。
どちらもGraphicsライブラリのProgressPenとDrawArcで動作します。
問題は、2つの円弧のエッジにはピクセルがいくつかあり、実際には接続しないことです。角度は倍数で、360度を確実にするように設定されています。
上記の画像で青は90.0度、赤は270.0度です(円内の25%は単なるフォントテストです)。
この現象を回避するにはどうすればよいですか?
私は両方の弧を描くように使用しているルーチンは次のとおりです。
Private Sub UserControl1_Paint(sender As Object, e As PaintEventArgs) Handles Me.Paint
e.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality
e.Graphics.InterpolationMode = Drawing2D.InterpolationMode.HighQualityBicubic
e.Graphics.PixelOffsetMode = Drawing2D.PixelOffsetMode.HighQuality
e.Graphics.TextRenderingHint = Drawing.Text.TextRenderingHint.AntiAlias
e.Graphics.CompositingMode = Drawing2D.CompositingMode.SourceOver
e.Graphics.CompositingQuality = Drawing2D.CompositingQuality.HighQuality
Dim NewRect As Rectangle = New Rectangle(m_X + (20/2.0f), m_Y + (20/2.0f), m_Width - 20, m_Height - 20)
DrawProgress(e.Graphics, NewRect, m_Valor)
End Sub
Private Sub DrawProgress(g As Graphics, rect As Rectangle, percentage As integer)
Dim progressAngle As single = CSng(360.000F/100.000F * percentage)
Dim remainderAngle As single = 360.000F - progressAngle
'create pens to use for the arcs
Using progressPen As New Pen(m_Color, 20), remainderPen As New Pen(m_EmptyColor, 20)
g.DrawArc(progressPen, rect, -90.000F, progressAngle)
g.DrawArc(remainderPen, rect, progressAngle - 90.000F, remainderAngle)
progressPen.Dispose
End Using
End Sub
私が間違って何をしているのですか?
REDバーとBLUEバーの間に空白スペースを入れずに完全な円を作成するにはどうすればよいですか?
注:バー幅が1または2の場合、効果は見られません。しかし、幅が20以上であってもコントロールを動作させる必要があります。任意のヘルプ
これは有効なアイデアだが、このコントロールは値を下げて表示されているので、DrawArcコマンドが逆の方法で描画されるかどうかわからない(フルサークルから360度未満) –
とにかく、必要な円弧だけを描画する代わりに、円全体を描く時間を無駄にすると考える必要があります。 –