タイトル | : Penの操作でエラー(VBS2005) |
記事No | : 7585 |
投稿日 | : 2008/05/22(Thu) 11:45 |
投稿者 | : ひでと |
お世話になります。画像処理を勉強中です。 Penの設定でエラーが出てしまい、原因がつかめずこまっています。 Pen.Color,Pen.DashPattern,Pen.DashStyleの使い方ではないかという所までは判明しました。お力をお貸しください。 次のコードで上記のプロパティをいじるとエラーが発生します。
Public Function Turn(ByVal Angle As Single) As clsCircle Dim my中心 As New clsPoint Dim 仮始点 As New clsPoint Dim 仮終点 As New clsPoint Dim dum As New clsCircle my中心 = 中心.Turn(Angle) dum.中心 = my中心 dum.半径 = 半径 仮始点 = 始点.Turn(Angle) 仮終点 = 終点.Turn(Angle) dum.始点角 = Math.Atan2(仮始点.y - dum.中心.y, 仮始点.x - dum.中心.x) / 2 * 360 / Math.PI dum.終点角 = Math.Atan2(仮終点.y - dum.中心.y, 仮終点.x - dum.中心.x) / 2 * 360 / Math.PI If dum.始点角 < 0 Then dum.始点角 = 360 + dum.始点角 If dum.終点角 < 0 Then dum.終点角 = 360 + dum.終点角 'dum.pen = pen.Clone'(1) 'dum.pen.Color = pen.Color'(2) dum.pen.DashPattern = pen.DashPattern '(3) dum.pen.DashStyle = pen.DashStyle '(4) Return dum End Function
この後ろの方の(1)から(4)までの組あわせで 別のプロシージャで 「保護されているメモリに読み取りまたは書き込み操作を行おうとしました。 他のメモリが壊れていることが考えられます。」 とのエラーが発生します。 エラーが発生しない場合を○×で表すと (1)× (2)○ (3)○ (4)○ (2),(3)× (2),(4)○ (3),(4)○ となります。'(ColorとDashPatternの組あわせでもエラーがでるのが特に???)
原因と対処方法をよろしくお願いします。 検証可能なコードが作れなさそうなので 抜粋して記載させていただきますが、 他に必要そうな箇所が有りましたら追記いたしますので教えてください。
Public Class clsCircle Public 中心 As New clsPoint Public 始点角 As Single Public 終点角 As Single Public 半径 As Single Public pen As New Pen(Color.Black, 1) Private new始点 As New clsPoint Private new終点 As New clsPoint
Public Function Turn(ByVal Angle As Single) As clsCircle Dim my中心 As New clsPoint Dim 仮始点 As New clsPoint Dim 仮終点 As New clsPoint Dim dum As New clsCircle my中心 = 中心.Turn(Angle) dum.中心 = my中心 dum.半径 = 半径 仮始点 = 始点.Turn(Angle) 仮終点 = 終点.Turn(Angle) dum.始点角 = Math.Atan2(仮始点.y - dum.中心.y, 仮始点.x - dum.中心.x) / 2 * 360 / Math.PI dum.終点角 = Math.Atan2(仮終点.y - dum.中心.y, 仮終点.x - dum.中心.x) / 2 * 360 / Math.PI If dum.始点角 < 0 Then dum.始点角 = 360 + dum.始点角 If dum.終点角 < 0 Then dum.終点角 = 360 + dum.終点角 'dum.pen = pen.Clone'(1) 'dum.pen.Color = pen.Color'(2) dum.pen.DashPattern = pen.DashPattern '(3) dum.pen.DashStyle = pen.DashStyle '(4) Return dum End Function
Public Sub Drawn(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs, _ ByVal 倍率 As Single, ByVal 描画中心 As clsPoint) Dim 左上Point As New clsPoint Dim x, y, width, height, startAngle, sweepAngle As Single 左上Point.x = 中心.x - 半径 左上Point.y = 中心.y + 半径 x = 左上Point.GraficX(sender, 倍率, 描画中心) y = 左上Point.GraficY(sender, 倍率, 描画中心) width = 2 * 半径 * 倍率 height = 2 * 半径 * 倍率 If mRound(終点角, 8) > mRound(始点角, 8) Then startAngle = 360 - 始点角 sweepAngle = -(終点角 - 始点角) Else startAngle = 360 - 終点角 sweepAngle = 360 + (終点角 - 始点角) End If If width <= 0 Then Exit Sub e.Graphics.DrawArc(pen, x, y, width, height, startAngle, sweepAngle)'ここでエラーが発生 End Sub End Class
Public Class Form1 Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click Dim pen As New Pen(Color.Black, 1) pen.Width = 1 pen.Color = Color.Black pen.DashStyle = Drawing2D.DashStyle.Solid With Me.ShapeDraw1 pen.Color = Color.Black pen.DashStyle = Drawing2D.DashStyle.Solid .AddLines(30, 30, 100, 100, pen) pen.Color = Color.Red pen.DashPattern = New Single() {10.0F, 2.0F, 2.0F, 2.0F, 2.0F, 2.0F, 2.0F} .AddCircles(100, 100, 50, 90, 360, pen) '.AddCircles(200, 200, 50, pen) 'Me.ShapeDraw1.IsSymmetry = True .Refresh() End With End Sub End Class
|