2017-07-06 7 views
0

私は、円形のプログレスバーを表示するコントロールを作った。 制御を以下に示す:2 ARCのとDrawArcがエッジを閉じない

enter image description here

  • 制御作品:
  • をそれらの一つは、現在の値(青に着色)
  • は他方が(残りの値を表示する表示赤色)。

どちらも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以上であってもコントロールを動作させる必要があります。任意のヘルプ

答えて

0

ため

おかげで私は完全な円として青色を描き、その上に赤い円弧を重ねるでしょう。

+0

これは有効なアイデアだが、このコントロールは値を下げて表示されているので、DrawArcコマンドが逆の方法で描画されるかどうかわからない(フルサークルから360度未満) –

+0

とにかく、必要な円弧だけを描画する代わりに、円全体を描く時間を無駄にすると考える必要があります。 –

関連する問題