tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
[ツリー表示へ]  [ワード検索]  [Home]

タイトル Penの操作でエラー(VBS2005)
投稿日: 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

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。