C# System.Drawing Graphics 画图
来源:互联网 发布:linux进程与线程的区别 编辑:程序博客网 时间:2024/04/27 19:13
串的参数无所谓主要看画图的那一块的处理,还有看这个引擎的指针如何画
/// <summary>
/// 保存生成的图片到指定的目录下
/// </summary>
/// <param name="dataSum"></param>
/// <param name="SCE"></param>
/// <param name="Cdinators"></param>
private void SavePicToFolder(List<int> dataSum, SysConfEntity SCE, List<Coordinator> Cdinators)
{
try
{
if (dataSum != null && Cdinators != null)
{
int posX, posY; //坐标
posX = (int)(int.Parse(SCE.PicWidth) / 2 - int.Parse(SCE.PicHeight) / 2);
posY = 0;
Bitmap objBmp = new Bitmap(int.Parse(SCE.PicWidth), int.Parse(SCE.PicHeight));
Graphics objgraphics = Graphics.FromImage(objBmp);
objgraphics.Clear(Color.White);
objgraphics.DrawImage(CreatePicFirst(dataSum, SCE, Cdinators), posX, posY);
//objgraphics.Dispose();
string FileName = SCE.PicSaveUrl + @"\EnginePic1.jpg";
objBmp.Save(FileName, System.Drawing.Imaging.ImageFormat.Jpeg);
//objBmp.Dispose();
objgraphics.DrawImage(CreatePicSecend(dataSum, SCE, Cdinators), posX, posY);
//objgraphics.Dispose();
FileName = SCE.PicSaveUrl + @"\EnginePic2.jpg";
objBmp.Save(FileName, System.Drawing.Imaging.ImageFormat.Jpeg);
//objBmp.Dispose();
objgraphics.DrawImage(CreatePicThird(dataSum, SCE, Cdinators), posX, posY);
//objgraphics.Dispose();
FileName = SCE.PicSaveUrl + @"\EnginePic3.jpg";
objBmp.Save(FileName, System.Drawing.Imaging.ImageFormat.Jpeg);
//objBmp.Dispose();
objgraphics.DrawImage(CreateEnginePic(dataSum, SCE, Cdinators), posX, posY);
objgraphics.Dispose();//释放graphic对象
FileName = SCE.PicSaveUrl + @"\EnginePic.jpg";
objBmp.Save(FileName, System.Drawing.Imaging.ImageFormat.Jpeg);
objBmp.Dispose();//释放bitmap对象
}
}
catch (Exception err)
{
//MessageBox.Show("保存图盘时错误(请确认存储路径是否设置正确,是否需要特殊权限才能保存)!错误原因:" + err.Message, "提示信息",
// MessageBoxButtons.OK, MessageBoxIcon.Information);
//Application.Exit();
}
}
#region "生成第二张图片"
/// <summary>
/// 生成第二张图片
/// </summary>
/// <param name="dataSum"></param>
/// <param name="SCE"></param>
/// <param name="Cdinators"></param>
/// <returns></returns>
private Bitmap CreatePicSecend(List<int> dataSum, SysConfEntity SCE, List<Coordinator> Cdinators)
{
try
{
int posX = 0, poxY = 0;//用于定位图片元素的位置
int[] engRan = new int[4];
int EngSum = 0;
double showEngSum = 0.0;
string EngName;
string FontName;
string FontSize;
//想设置一个正方形的画布,边长是要求矩形图片短边长度
int picBoderLength = 1;
if (int.Parse(SCE.PicHeight) < int.Parse(SCE.PicWidth))
{
picBoderLength = int.Parse(SCE.PicHeight);
}
else
{
picBoderLength = int.Parse(SCE.PicWidth);
}
Bitmap objbitmap = new Bitmap(picBoderLength, picBoderLength);
Graphics objgraphics = Graphics.FromImage(objbitmap);
objgraphics.Clear(Color.White);
objgraphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;//指定消除锯齿呈现
objgraphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;//文本优化
//生成图片的上半部分,因为这三张图片通用的,可以提出一个方法
objgraphics.DrawImage(GetHeadBmp(dataSum, SCE, Cdinators, picBoderLength), posX, poxY);
//生成图片的引擎部分
if (dataSum != null)
{
EngSum = dataSum[2];
showEngSum = EngSum / 10000.0;
EngSum = EngSum / 10000;
}
else
{
showEngSum = 0.0;
}
EngName = SCE.Eng3Name;
FontName = SCE.fontname;
FontSize = SCE.fontsize;
engRan[0] = int.Parse(SCE.Eng3BlueST);
engRan[1] = int.Parse(SCE.Eng3YellowST);
engRan[2] = int.Parse(SCE.Eng3RedST);
engRan[3] = int.Parse(SCE.Eng3RedED);
//生成引擎图片
posX = (int)(picBoderLength * 0.14);
poxY = (int)(picBoderLength * 0.56);
Bitmap bmpEngine = new Bitmap(Image.FromFile(Application.StartupPath + @"..\..\..\Images\engyellow.png"), new Size((int)(picBoderLength * 0.72), (int)(picBoderLength * 0.36)));
objgraphics.DrawImage(bmpEngine, posX, poxY);
//生成指针
posX = (int)(picBoderLength * 0.48);
poxY = (int)(picBoderLength * 0.86);
SolidBrush penbrush = new SolidBrush(Color.Black);
Pen pen = new Pen(Brushes.Black, 3);
Rectangle rect = new Rectangle(posX, poxY, (int)(picBoderLength * 0.04), (int)(picBoderLength * 0.04));
objgraphics.DrawEllipse(pen, rect);
objgraphics.FillEllipse(penbrush, rect);
int px0, py0, px1, py1, length, mrad;
mrad = 0;//角度
//****************计算指针的角度***************************
if (EngSum < engRan[1])
{
mrad = (int)(135 + 45 * (1 - EngSum * 1.0 / engRan[1]));
}
else if ((EngSum >= engRan[1]) && (EngSum < engRan[2]))
{
mrad = (int)(50 + 85 * (1 - (EngSum * 1.0 - engRan[1]) / (engRan[2] - engRan[1])));
}
else if ((EngSum >= engRan[2]) && (EngSum <= engRan[3]))
{
mrad = (int)(50 * (1 - (EngSum * 1.0 - engRan[2]) / (engRan[3] - engRan[2])));
}
else
{
mrad = 0;
}
//*********************************************************
length = (int)(picBoderLength * 0.28);//指针长度
px0 = (int)(picBoderLength * 0.5);//起始点x坐标
py0 = (int)(picBoderLength * 0.88);//起始点y坐标
px1 = px0 + (int)(length * Math.Cos(mrad * Math.PI / 180));//终止点x坐标
py1 = py0 - (int)(length * Math.Sin(mrad * Math.PI / 180));//终止点y坐标
Pen penL = new Pen(Brushes.Black, (int)(picBoderLength * 0.02));//指针宽度
objgraphics.DrawLine(penL, px0, py0, px1, py1);
posX = (int)(picBoderLength * 0.19);
poxY = (int)(picBoderLength * 0.5);
objgraphics.DrawString(EngName, new Font(FontName, (float)(int.Parse(FontSize)), FontStyle.Bold), Brushes.Red, posX, poxY);
string showEngNum = showEngSum.ToString("F1");
int numlengthnum = showEngNum.Length;
if (numlengthnum == 6) // 这一块主要是数字的位数不一定,没办法确定那个位置合适 因为这个项目最多6位 我就这样简单的处理了
{
posX = (int)(picBoderLength * 0.325);
poxY = (int)(picBoderLength * 0.91);
//showEngSum.ToString("F1")
objgraphics.DrawString(showEngNum, new Font(FontName, (float)(int.Parse(FontSize) * 1.45), FontStyle.Bold), Brushes.Black, posX, poxY);
posX = (int)(picBoderLength * 0.56);
poxY = (int)(picBoderLength * 0.93);
objgraphics.DrawString("万米", new Font(FontName, (float)(int.Parse(FontSize) * 0.9), FontStyle.Bold), Brushes.Black, posX, poxY);
}
else if (numlengthnum == 5)
{
posX = (int)(picBoderLength * 0.34);
poxY = (int)(picBoderLength * 0.91);
//showEngSum.ToString("F1")
objgraphics.DrawString(showEngNum, new Font(FontName, (float)(int.Parse(FontSize) * 1.45), FontStyle.Bold), Brushes.Black, posX, poxY);
posX = (int)(picBoderLength * 0.54);
poxY = (int)(picBoderLength * 0.93);
objgraphics.DrawString("万米", new Font(FontName, (float)(int.Parse(FontSize) * 0.9), FontStyle.Bold), Brushes.Black, posX, poxY);
}
else if (numlengthnum == 4)
{
posX = (int)(picBoderLength * 0.355);
poxY = (int)(picBoderLength * 0.91);
//showEngSum.ToString("F1")
objgraphics.DrawString(showEngNum, new Font(FontName, (float)(int.Parse(FontSize) * 1.45), FontStyle.Bold), Brushes.Black, posX, poxY);
posX = (int)(picBoderLength * 0.515);
poxY = (int)(picBoderLength * 0.93);
objgraphics.DrawString("万米", new Font(FontName, (float)(int.Parse(FontSize) * 0.9), FontStyle.Bold), Brushes.Black, posX, poxY);
}
else
{
posX = (int)(picBoderLength * 0.38);
poxY = (int)(picBoderLength * 0.91);
//showEngSum.ToString("F1")
objgraphics.DrawString(showEngNum, new Font(FontName, (float)(int.Parse(FontSize) * 1.45), FontStyle.Bold), Brushes.Black, posX, poxY);
posX = (int)(picBoderLength * 0.5);
poxY = (int)(picBoderLength * 0.93);
objgraphics.DrawString("万米", new Font(FontName, (float)(int.Parse(FontSize) * 0.9), FontStyle.Bold), Brushes.Black, posX, poxY);
}
posX = (int)(picBoderLength * 0.13);
poxY = (int)(picBoderLength * 0.86);
objgraphics.DrawString(engRan[0].ToString(), new Font(FontName, (float)(int.Parse(FontSize)), FontStyle.Bold), Brushes.Black, posX, poxY);
posX = (int)(picBoderLength * 0.19);
poxY = (int)(picBoderLength * 0.61);
objgraphics.DrawString(engRan[1].ToString(), new Font(FontName, (float)(int.Parse(FontSize)), FontStyle.Bold), Brushes.Black, posX, poxY);
posX = (int)(picBoderLength * 0.71);
poxY = (int)(picBoderLength * 0.61);
objgraphics.DrawString(engRan[2].ToString(), new Font(FontName, (float)(int.Parse(FontSize)), FontStyle.Bold), Brushes.Black, posX, poxY);
posX = (int)(picBoderLength * 0.83);
poxY = (int)(picBoderLength * 0.86);
objgraphics.DrawString(engRan[3].ToString(), new Font(FontName, (float)(int.Parse(FontSize)), FontStyle.Bold), Brushes.Black, posX, poxY);
posX = (int)(picBoderLength * 0.67);
poxY = (int)(picBoderLength * 0.89);
objgraphics.DrawString("单位:万米", new Font(FontName, (float)(int.Parse(FontSize) * 0.6), FontStyle.Bold), Brushes.Red, posX, poxY);
objgraphics.Dispose();
return objbitmap;
}
catch (Exception ex)
{
//MessageBox.Show("生成第二张图象失败:" + ex.Message + "请联系管理员!", "提示",
// MessageBoxButtons.OK, MessageBoxIcon.Information);
//Application.Exit();
return null;
}
}
#endregion
- C# System.Drawing Graphics 画图
- System.Drawing.Graphics
- C# 使用Graphics画图
- using System.Drawing; j简单画图
- System.Drawing.Graphics读取带有索引的图片及思考
- C# 图形化编程 System.Drawing
- C#中System.Drawing制作折线图
- UIKit Graphics System---Graphics and drawing in iOS 学习笔记1
- C#中Graphics的画图代码【转】
- C#中Graphics的画图代码【转】
- C# 关于画图Graphics Bitmap image
- graphics画图
- c#中System.Drawing.Color 和System.Drawing.Brush 类型转换
- UIKit Graphics System--Drawing Shapes Using Bezier Paths学习笔记2
- C# System.Drawing.Imaging下的 Encoder 的一些属性
- C#将字符串转换成System.Drawing.Color类型
- C# System.Drawing.Region类的方法使用图解
- C#中System.Drawing来画立体饼状图
- HDU2516:取石子游戏(斐波那契博弈)
- iOS 7: 如何为iPhone 5S编译64位应用
- 中学德育工作汇报材料
- oracle 创建用户并授权
- cache
- C# System.Drawing Graphics 画图
- ArcGIS数据库复制与同步更新
- 如何下载旧版本的Eclipse,或者查看之前发布的版本。
- 64-Bit Programming Models: Why LP64?
- as3的【】
- 网络游戏服务器构架设计(一):前言
- Mybatis 中在传参时,$ 和# 的区别
- Comet:基于 HTTP 长连接的“服务器推”技术
- 网络游戏服务器构架设计(一):前言