vb.net c# 在picturebox中用GDI画图问题

wangerxiao0606 2013-07-22 01:50:59
大家好,请教一个困惑很久的问题,我想在vb.net或者C# 的picturebox控件中画一个折线图,面临如下问题:
1.坐标系转换
2.像素与x轴数字个数的关联问题
我不想使用ZedGraph或者MSChart解决此问题,从技术角度,还是想用GDI解决此问题

代码我写了一部分,需求在里面用注释的形式写下,新建一个工程后,拖一个按钮,一个picturebox.按钮中代码如下:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim w As Integer = PictureBox1.Width '图像宽度 单位:像素
Dim h As Integer = PictureBox1.Height '图像高度 单位:像素
Dim mybitmap As Bitmap = New Bitmap(w, h)
PictureBox1.Image = mybitmap
Dim Graph As Graphics '定义画布
Graph = Graphics.FromImage(PictureBox1.Image) '设置画布
Graph.Clear(Color.Black)

Dim arr(6) As Integer '定义一个7个数组成的数组
arr(0) = 200
arr(1) = 262
arr(2) = 88 '最小值
arr(3) = 422
arr(4) = 219
arr(5) = 333
arr(6) = 526 '最大值

'假设picturebox宽度是314,高度是212
'问题1:重新建立我们熟悉的坐标系,左下角为(0,0),右上角为(7,526),7是表示数组个数
'问题2:在此坐标系之上7个点连成一个折线图
'问题3:难道真的要手动计算每个点的像素位置吗?或者说坐标,比如左边第一个点的X轴坐标就是w/7,这样获得的是一个小数啊
'数据少的时候可以cint一下,误差还好.但是当arr这个数组的长度比较大的时候,比如9999,而picturebox的宽度比如是200的时候,误差也会越来越大
'有什么方法可以将数组的长度和picturebox的像素比较方便的结合起来或者不用我们去理会,就像过去vb6时
'可以使用 Picture2.Scale (x1, y1)-(x2, y2)一样比较方便的设置scale,而不用去考虑像素问题

'我不想使用zedgraph或者mschart这些控件,我相信应该有解决方法,因为这些控件的底层不也是按照GDI的原理画出来的吗
'谢谢大家!!!!!

End Sub
...全文
348 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangerxiao0606 2013-07-22
  • 打赏
  • 举报
回复
自己解决了,就是硬算,没什么好方法

16,553

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧