public void draw(Page page,DataTable dt,int Tnum)
{
//取得记录数量
int count = dt.Rows.Count;
//记算图表宽度
int wd = 80 + 20 * (count - 1);
//设置最小宽度为800
if (wd < 800) wd = 800;
//生成Bitmap对像
Bitmap img=new Bitmap(wd,400);
//生成绘图对像
Graphics g = Graphics.FromImage(img);
//定义黑色画笔
Pen Bp = new Pen(Color.Black);
//定义红色画笔
Pen Rp = new Pen(Color.Red);
//定义银灰色画笔
Pen Sp = new Pen(Color.Silver);
//定义大标题字体
Font Bfont = new Font("Arial", 12, FontStyle.Bold);
//定义一般字体
Font font = new Font("Arial", 6);
//定义大点的字体
Font Tfont = new Font("Arial", 9);
//绘制底色
g.DrawRectangle(new Pen(Color.White, 400), 0, 0, img.Width, img.Height);
//定义黑色过渡型笔刷
LinearGradientBrush brush = new LinearGradientBrush(new Rectangle(0, 0, img.Width, img.Height), Color.Black, Color.Black, 1.2F, true);
//定义蓝色过渡型笔刷
LinearGradientBrush Bluebrush = new LinearGradientBrush(new Rectangle(0, 0, img.Width, img.Height), Color.Blue, Color.Blue, 1.2F, true);
//绘制大标题
g.DrawString(dt.Rows[0]["Num"].ToString() + "本年慢病随访情况曲线图", Bfont, brush, 40, 5);
//取得当前发送量
int nums=0;
for (int i = 0; i < count; i++)
{
nums += Convert.ToInt32(dt.Rows[i]["Num"]);
}
//绘制信息简报
string info="首次随访时间:"+dt.Rows[0]["dc"].ToString()+" 曲线图生成时间:"+DateTime.Now.ToString()+" 随访次数:"+dt.Rows.Count.ToString()+" 当前发送总量:"+nums.ToString();
g.DrawString(info, Tfont, Bluebrush, 40, 25);
//绘制图片边框
g.DrawRectangle(Bp, 0, 0, img.Width - 1, img.Height - 1);
//绘制竖坐标线
for (int i = 0; i < count; i++)
{
g.DrawLine(Sp, 40+20 * i, 60, 40+20 * i, 360);
}
//绘制时间轴坐标标签
for (int i = 0; i < count; i+=2)
{
string st = Convert.ToDateTime(dt.Rows[i]["dc"]).ToString("yyyy-MM-dd");
g.DrawString(st, font, brush, 30 + 20 * i, 370); }
//绘制横坐标线
for (int i = 0; i < 10; i++)
{
g.DrawLine(Sp, 40, 60+30*i, 40+20*(count-1), 60+30*i);
int s = 2500 - 50 * i * 5;
//绘制发送量轴坐标标签
g.DrawString(s.ToString(), font, brush, 10, 60 + 30 * i);
}
//绘制竖坐标轴
g.DrawLine(Bp, 40, 55, 40, 360);
//绘制横坐标轴
g.DrawLine(Bp, 40, 360, 45 + 20 * (count - 1), 360);
//定义曲线转折点
Point[] p = new Point[count];
for (int i = 0; i < count; i++)
{
p[i].X = 40 + 20 * i;
p[i].Y = 360 - Convert.ToInt32(dt.Rows[i]["Num"]) / 5 * 3 / 5;
}
//绘制发送曲线
g.DrawLines(Rp, p);
for (int i = 0; i < count; i++)
{
//绘制发送记录点的发送量
g.DrawString(dt.Rows[i]["Num"].ToString(), font, Bluebrush, p[i].X, p[i].Y - 10);
//绘制发送记录点
g.DrawRectangle(Rp, p[i].X - 1, p[i].Y - 1, 2, 2);
}
//绘制竖坐标标题
g.DrawString("血压值", Tfont, brush, 5, 40);
//绘制横坐标标题
g.DrawString("随访时间", Tfont, brush, 40, 385);
//保存绘制的图片
MemoryStream stream = new MemoryStream();
img.Save(stream, ImageFormat.Jpeg);
//图片输出
page.Response.Clear();
page.Response.ContentType = "image/jpeg";
page.Response.BinaryWrite(stream.ToArray());
}
分享到:
相关推荐
在本文中,我们将深入探讨基于C# WinForm的GDI绘图板源码,这是一个非常适合初学者学习和研究的项目。GDI(Graphics Device Interface)是Windows操作系统中的一个图形库,用于处理图形输出,如绘制图像、文本以及...
GDI绘图序列的保存主要是为了记录下一系列的绘图命令,以便于后续能够重新执行这些命令,恢复到之前的绘图状态。这在创建动态图形、动画或者需要多次绘制相同图形的场景中非常有用。序列保存通常涉及到以下步骤: 1...
本篇文章将深入探讨如何提高GDI绘图的性能和效率,并涉及到DirectDraw的相关技术。 首先,"基于MFC的DirectDraw高速图形绘制方法与应用.pdf"这篇文章可能会讨论如何利用Microsoft Foundation Class (MFC)库来整合...
本示例“C#绘图移动GDI绘图鼠标拖动图像”正是针对这一需求提供的一种解决方案,它利用了GDI+(Graphics Device Interface Plus)库来实现图像的绘制和拖动。 GDI+是.NET Framework中用于图形处理的基础组件,它...
这个压缩包“GDI绘图新手入门源代码”显然是为初学者准备的一份教程资源,通过源代码的形式,帮助他们理解和掌握如何在Windows环境下使用GDI进行图形编程。 GDI的主要知识点包括: 1. **基本概念**:GDI是Windows ...
本资源"**MFC_GDI绘图基础.rar**"显然是一个关于如何在MFC应用中使用GDI进行图形绘制的学习资料,其包含的文档"**MFC_GDI绘图基础.doc**"可能详细讲解了这一主题。 首先,GDI是Windows操作系统内核的一部分,它提供...
在C#中,你可以通过`Control.CreateGraphics()`方法获取到一个Graphics对象,用于在控件上绘制图形,就像我们的示例文件"CreateGraphics(GDI绘图)"所示。 4. **绘图基本元素**: - **Pen**:定义线条的样式,如...
在IT领域,模拟屏幕、XML存储设置、GDI绘图以及单例模式是四个关键的概念。下面将分别详细解释这些知识点,并结合它们如何在实际应用中相互作用。 首先,模拟屏幕是指通过软件技术来创建一个虚拟的显示环境,通常...
MFC中的GDI绘图涉及到Windows编程中的图形设备接口(GDI)和设备环境(DC)的概念,以及MFC框架中对这些概念的封装和支持。GDI是Windows操作系统提供的一种接口,允许开发者创建图形和文本,将其绘制在屏幕上或者...
在给定的“鼠标操作矩形框GDI绘图可放大缩小,拖动矩形框”主题中,我们将深入探讨如何使用GDI实现这些功能。 首先,我们需要理解GDI的基本概念。GDI是Windows API的一部分,它为应用程序提供了一组函数,允许程序...
在MFC中,你可以通过重载`OnPaint()`成员函数来执行GDI绘图。`OnPaint()`函数会在需要更新窗口时被系统调用,此时你可以使用GDI函数绘制窗口内容。 在`OnPaint()`中,你需要创建一个`CPaintDC`对象,它是`CDC`...
下面将详细介绍如何在C#的GDI绘图中设置X轴和Y轴的正方向。 ### 一、理解GDI默认坐标系 首先,需要明确GDI默认的坐标系特点: - **原点**:位于绘图区域的左上角。 - **X轴**:从左到右为正方向。 - **Y轴**:从上...
在你提供的压缩包文件“GDI绘图项目”中,可能包含了一个简单的C#应用程序,演示了如何使用GDI+进行基本的图形绘制。通过学习和分析这个项目的源代码,你可以更深入地理解C#与GDI+的结合使用,以及如何将这些技术...
在这个主题中,我们将深入探讨C# GDI绘图的关键概念和实践应用。 首先,理解GDI绘图的基本元素是至关重要的。这包括`Graphics`对象,它是实际执行绘图操作的主体;`Pen`对象,用于定义线条的样式、颜色和宽度;`...
总之,VC++中的GDI绘图涉及到设备上下文、图形对象、绘图函数等多个概念,熟练掌握这些知识,能够帮助开发者创建出丰富多样的图形用户界面。通过不断的实践和学习,你将能够运用GDI自由地在Windows应用程序中绘制...
在本案例中,我们关注的是"C#PictureBox控件GDI绘图自定义图表控件类库",这是一个利用C#的PictureBox控件和GDI+(Graphics Device Interface)进行图形绘制的库,旨在帮助开发者创建自定义的图表显示控件。...
本项目“GDI绘图实现WINDOWS画板”旨在利用GDI来模仿并实现Windows附件中的画板程序,提供基本的绘画功能,如绘制线条、形状、填充颜色等,使得用户可以进行自由创作。 GDI的核心概念包括: 1. **设备上下文...
本文将围绕“wince下GDI绘图性能测试”这一主题,深入探讨GDI绘图的性能瓶颈、测试方法以及优化策略。 首先,我们要理解GDI绘图的基本原理。GDI是一种面向设备的编程模型,它允许程序员独立于特定硬件进行图形绘制...
首先,GDI绘图需要使用到Windows API函数,这些函数在Windows SDK中定义,包括创建设备上下文(Device Context,DC)、选择对象、设置绘图属性以及执行实际的绘图操作等。设备上下文是GDI的核心概念,它是Windows...
### GDI+绘图基础知识详解 #### 一、GDI+概述 GDI+(Graphics Device Interface Plus)是一种用于Windows平台的图形设备接口技术,它提供了丰富的2D图形和图像处理功能。相比于传统的GDI(Graphics Device ...