ClassDrawChart类(画柱状图)

Imports System.Drawing.Drawing2D
Imports System.Drawing
'绘制图表
Public Class ClassDrawChart

#Region "字段"
    Private mData As ArrayList                                                      '数据
    Private mItemName As ArrayList                                                  '检测项目名称
    Private mintCount As Integer                                                    '数据个数
    Private mintAllTestCount As Integer                                             '总检测次数
    Private mType As ClassTest.TestType                                             '类型
    Private mBmp As Bitmap                                                          '图形
    Private mImageStream As System.IO.MemoryStream                                  '图形流  
    Private mintWidth As Integer = 1080                                             '宽
    Private mintHeight As Integer = 740                                             '高
    Private GDI As Graphics                                                         'GDI
#End Region

#Region "属性"
    Public ReadOnly Property Image() As Bitmap                                      '图形
        Get
            Return mBmp
        End Get
    End Property

    Public ReadOnly Property ImageStream() As System.IO.MemoryStream                '图形流
        Get
            Return mImageStream
        End Get
    End Property
#End Region

#Region "方法"
    Public Sub New(ByVal Data As ArrayList, ByVal ItemName As ArrayList, ByVal Type As ClassTest.TestType, ByVal AllTestCoun As Integer)       '构造函数
        mData = Data
        mItemName = ItemName
        mintCount = Data.Count
        mType = Type
        mintAllTestCount = AllTestCoun
    End Sub                        '构造
    Public Sub Drawing()
        Try
            '绘制
            mBmp = New Bitmap(mintWidth, mintHeight)
            mImageStream = New System.IO.MemoryStream
            GDI = Graphics.FromImage(mBmp)
            GDI.Clear(Color.White)
            '绘制标题
            DrawingTitle(mType, GDI)
            '绘制坐标轴
            DrawingXYAxis(mType, GDI)
            '绘制柱状图
            DrawingChart(mType, GDI)
            '保存图表至内存中
            mBmp.Save(mImageStream, Imaging.ImageFormat.Bmp)
        Catch ex As Exception
            Debug.WriteLine(ex.ToString)
            ClassComm.WriteErrMessage(ex.ToString, "ClassDrawChart_Drawing")
        End Try
    End Sub                                                                             '绘制
    Private Sub DrawingTitle(ByVal Type As ClassTest.TestType, ByVal GDI As Graphics)
        Try
            '绘制标题
            Dim Title As String
            Dim TitleFont As New Font("宋体", 12, FontStyle.Bold)
            Dim X, Y As Integer
            Select Case Type
                Case ClassTest.TestType.CarComputer
                    Title = "车身电脑不合格统计图表"
                Case ClassTest.TestType.CompositeMeter
                    Title = "组合仪表不合格统计图表"
            End Select
            X = (mintWidth - TitleFont.Size * Title.Length * 1.4) / 2
            Y = 22
            GDI.DrawString(Title, TitleFont, New SolidBrush(Color.Black), X, Y)
        Catch ex As Exception
            Debug.WriteLine(ex.ToString)
            ClassComm.WriteErrMessage(ex.ToString, "ClassDrawChart_DrawingTitle")
        End Try
    End Sub                '绘制标题
    Private Sub DrawingXYAxis(ByVal Type As ClassTest.TestType, ByVal GDI As Graphics)
        Try
            '绘制坐标轴
            Dim XAxis_X1, XAxis_Y1, XAxis_X2, XAxis_Y2 As Integer                   'X轴坐标
            Dim YAxis_X1, YAxis_Y1, YAxis_X2, YAxis_Y2 As Integer                   'Y轴坐标
            Dim Point_1, Point_2, Point_3 As Point                                  '三角坐标
            Dim TrigonPoint As Point()                                              '三角坐标系
            Dim TrigonBrush As New SolidBrush(Color.Black)                          '笔刷
            Dim LinePen As New Pen(Color.Black, 2)
            XAxis_X1 = 20
            XAxis_X2 = mintWidth - 20
            XAxis_Y1 = mintHeight - 50
            XAxis_Y2 = XAxis_Y1
            GDI.DrawLine(LinePen, XAxis_X1, XAxis_Y1, XAxis_X2, XAxis_Y2)           'X轴
            Point_1 = New Point(XAxis_X2, XAxis_Y1)
            Point_2 = New Point(XAxis_X2 - 15, XAxis_Y1 - 5)
            Point_3 = New Point(XAxis_X2 - 15, XAxis_Y1 + 5)
            TrigonPoint = New Point() {Point_1, Point_2, Point_3}
            GDI.FillPolygon(TrigonBrush, TrigonPoint)                               'X轴三角
            YAxis_X1 = 40
            YAxis_X2 = YAxis_X1
            YAxis_Y1 = 50
            YAxis_Y2 = mintHeight - 30
            GDI.DrawLine(LinePen, YAxis_X1, YAxis_Y1, YAxis_X2, YAxis_Y2)           'Y轴
            Point_1 = New Point(YAxis_X1, YAxis_Y1)
            Point_2 = New Point(YAxis_X1 - 5, YAxis_Y1 + 15)
            Point_3 = New Point(YAxis_X1 + 5, YAxis_Y1 + 15)
            TrigonPoint = New Point() {Point_1, Point_2, Point_3}
            GDI.FillPolygon(TrigonBrush, TrigonPoint)                               'X轴三角
        Catch ex As Exception
            Debug.WriteLine(ex.ToString)
            ClassComm.WriteErrMessage(ex.ToString, "ClassDrawChart_DrawingXYAxis")
        End Try
    End Sub               '绘制坐标轴
    Private Sub DrawingChart(ByVal type As ClassTest.TestType, ByVal GDI As Graphics)
        '绘制柱状图
        Try
            Dim PerWidth, PerHeight, AllWidth, AllHeight As Integer
            Dim iLoop As Integer
            Dim X1, Y1, X2, Y2, X, Y, Width, Height As Integer
            Dim RectangleBrush As New HatchBrush(HatchStyle.BackwardDiagonal, Color.Red, Color.White)
            Dim RectanglePen As New Pen(Color.Red)
            Dim DataFont As New Font("宋体", 9)
            Dim TitleFont As New Font("宋体", 9)
            Dim TitleDrawFormat As New StringFormat
            AllWidth = mintWidth - 40 - 20 - 15 - 20                                   '绘制柱状图的Y轴长度
            AllHeight = mintHeight - 50 - 15 - 20 - 30 - 20
            X1 = 40
            Y1 = mintHeight - 50
            X2 = mintWidth - 20 - 15 - 20
            Y2 = Y1
            PerWidth = (X2 - X1) / mintCount
            PerHeight = AllHeight / mintAllTestCount
            Width = PerWidth / 3
            '绘制
            For iLoop = 0 To mintCount - 1
                '绘制柱状图
                If mData(iLoop) = 0 Then
                    X = X1 + (PerWidth * 2 / 3) + (PerWidth * iLoop)
                    Y = Y2
                    Height = 10
                    GDI.FillRectangle(RectangleBrush, X, Y, Width, Height)
                    GDI.DrawRectangle(RectanglePen, X, Y, Width, Height)
                Else
                    X = X1 + (PerWidth * 2 / 3) + (PerWidth * iLoop)
                    Y = Y2 - (PerHeight * mData(iLoop))
                    Height = PerHeight * mData(iLoop)
                    GDI.FillRectangle(RectangleBrush, X, Y, Width, Height)
                    GDI.DrawRectangle(RectanglePen, X, Y, Width, Height)
                End If
                '绘制数字
                Select Case mData(iLoop).ToString.Length
                    Case 1                                  '1位数字
                        GDI.DrawString(mData(iLoop), DataFont, New SolidBrush(Color.Red), X, Y - DataFont.Height)
                    Case 2                                  '2位数字
                        GDI.DrawString(mData(iLoop), DataFont, New SolidBrush(Color.Red), X - DataFont.Size / 2, Y - DataFont.Height)
                    Case 3                                  '3位数字
                        GDI.DrawString(mData(iLoop), DataFont, New SolidBrush(Color.Red), X - DataFont.Size * 2 / 3, Y - DataFont.Height)
                End Select
                '绘制名称
                TitleDrawFormat.FormatFlags = StringFormatFlags.DirectionVertical
                GDI.DrawString(mItemName(iLoop), TitleFont, New SolidBrush(Color.Blue), (X1 + (PerWidth * iLoop)), (Y1 - mItemName(iLoop).ToString.Length * TitleFont.Height), TitleDrawFormat)
            Next
        Catch ex As Exception
            Debug.WriteLine(ex.ToString)
            ClassComm.WriteErrMessage(ex.ToString, "ClassDrawChart_DrawingChart")
        End Try
    End Sub                '绘制柱状图
    Public Sub Print(ByVal GDI As Graphics)
        '打印
        Try
            GDI.DrawImage(mBmp, 0, 0)
        Catch ex As Exception
            Debug.WriteLine(ex.ToString)
            ClassComm.WriteErrMessage(ex.ToString, "ClassDrawChart_Print")
        End Try
    End Sub                                                          '打印图表
#End Region

End Class

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值