实时打印图片的问题,请同学和老师们帮忙看看,谢谢
2011-03-02 21:06
274 查看
我现在在做个绘图软件,恩,就是那种读取主板文件,并绘制电路元件图的那种软件,我现在要实现的就是打印这个功能。
我不太会,老是会出问题。
代码:
[align=left]/*********文件读取**********/[/align]
[align=left] private string[] allfile;//定义放多个文件的数组[/align]
[align=left] [/align]
[align=left] ClassBDR bdr = new ClassBDR();[/align]
[align=left] float R = 1.0f;//定义圆的半径[/align]
[align=left] private void 打开文件ToolStripMenuItem_Click(object sender, EventArgs e)[/align]
[align=left] {[/align]
[align=left] OpenFileDialog dlgOpenFile = new OpenFileDialog();[/align]
[align=left] [/align]
[align=left] dlgOpenFile.Filter = "BDR文件|*.BDR";[/align]
[align=left] dlgOpenFile.Title = "打开文件";[/align]
[align=left] dlgOpenFile.Multiselect = true;//选取多个档案[/align]
[align=left] [/align]
[align=left] try[/align]
[align=left] {[/align]
[align=left] if (dlgOpenFile.ShowDialog() == DialogResult.OK)[/align]
[align=left] {[/align]
[align=left] allfile = dlgOpenFile.FileNames;[/align]
[align=left] }[/align]
[align=left] }[/align]
[align=left] catch (Exception ex)[/align]
[align=left] {[/align]
[align=left] MessageBox.Show(ex.Message);[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] Pen pen2 = new Pen(Color.Blue, 0.01f);[/align]
[align=left] Graphics g = Graphics.FromHwnd(pictureBox1.Handle);[/align]
[align=left] //改变坐标系统的原点,把坐标原点设置在pictrue画面的中心点[/align]
[align=left] g.TranslateTransform((float)(pictureBox1.Width / 2 / 96), (float)(pictureBox1.Height / 2 / 96));[/align]
[align=left] g.PageUnit = GraphicsUnit.Inch;//指定英尺作为测量单位[/align]
[align=left] g.PageScale = 1; //指定绘图单位和书面单位之间的缩放[/align]
[align=left] [/align]
[align=left] for (int i = 0; i < allfile.Length; i++)[/align]
[align=left] {[/align]
[align=left] [/align]
[align=left] //把文件中的所有行读入数组[/align]
[align=left] string[] listfield = File.ReadAllLines(allfile[i]);[/align]
[align=left] [/align]
[align=left] //定义一个数组用来存储坐标点[/align]
[align=left] string[] getXY;[/align]
[align=left] //划分数组[/align]
[align=left] if (listfield == null)[/align]
[align=left] return;[/align]
[align=left] else //if(dlgOpenFile.Filter=="*.BDR")[/align]
[align=left] {[/align]
[align=left] for (int j = 0; j < listfield.Length; j++)[/align]
[align=left] {[/align]
[align=left] if (listfield[j].Substring(0, 1) == "T")[/align]
[align=left] continue;[/align]
[align=left] else if (listfield[j].Substring(0, 1) == "M")[/align]
[align=left] continue;[/align]
[align=left] else[/align]
[align=left] {[/align]
[align=left] [/align]
[align=left] getXY = listfield[j].Split('Y');[/align]
[align=left] [/align]
[align=left] [/align]
[align=left] bdr.PointX = getXY[0].Substring(1);[/align]
[align=left] bdr.PointY = getXY[1];[/align]
[align=left] //画图[/align]
[align=left] g.DrawEllipse(pen2, Convert.ToSingle(bdr.PointX) / 10000.0f, Convert.ToSingle(bdr.PointY) / 10000.0f, (float)(R / 25.4f), (float)(R / 25.4f));[/align]
[align=left] }[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] }[/align]
[align=left] //释放资源[/align]
[align=left] g.Dispose();[/align]
[align=left] }[/align]
[align=left] /*********执行**********/[/align]
[align=left] [/align]
[align=left] //打印[/align]
[align=left] private void btnPrint_Click(object sender, EventArgs e)[/align]
[align=left] {[/align]
[align=left] [/align]
[align=left] }[/align]
[align=left] //打印预览[/align]
[align=left] private void btnPp_Click(object sender, EventArgs e)[/align]
[align=left] {[/align]
[align=left] this.dlgPp.Document = Pd;[/align]
[align=left] this.dlgPp.ShowDialog();[/align]
[align=left] }[/align]
[align=left] //打印设置[/align]
[align=left] private void btnPs_Click(object sender, EventArgs e)[/align]
[align=left] {[/align]
[align=left] [/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] [/align]
[align=left] private void Form1_Load(object sender, EventArgs e)[/align]
[align=left] {[/align]
[align=left] //初始化画图界面[/align]
[align=left] FormatPbox();[/align]
[align=left] }[/align]
[align=left] public void FormatPbox()//初始化画图界面[/align]
[align=left] {[/align]
[align=left] pictureBox1.Image = new Bitmap(pictureBox1.Width, pictureBox1.Height);[/align]
[align=left] Pen pen1 = new Pen(Color.Red, (float)0.5);[/align]
[align=left] Graphics g = Graphics.FromImage(pictureBox1.Image);[/align]
[align=left] [/align]
[align=left] g.DrawLine(pen1, 0, pictureBox1.Height / 2, pictureBox1.Width, pictureBox1.Height / 2);[/align]
[align=left] g.DrawLine(pen1, pictureBox1.Width / 2, 0, pictureBox1.Width / 2, pictureBox1.Height);[/align]
[align=left] g.Dispose();[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] private Image images;[/align]
[align=left] private void Pd_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)[/align]
[align=left] {[/align]
[align=left] images = this.pictureBox1.Image;[/align]
[align=left] //获取打印机纸张的宽度和高度[/align]
[align=left] int printWidth = Pd.DefaultPageSettings.PaperSize.Width;[/align]
[align=left] int printHeight = Pd.DefaultPageSettings.PaperSize.Height;[/align]
[align=left] //判断图片的宽度是否小于等于纸张的宽度[/align]
[align=left] if (Convert.ToUInt32(pictureBox1.Image.Width) <= printWidth)[/align]
[align=left] {[/align]
[align=left] //如果图片的宽度小于等于纸张的宽度,则让图片处在纸张的中间[/align]
[align=left] float x = (printWidth - Convert.ToUInt32(pictureBox1.Image.Width)) / 2;[/align]
[align=left] float y = (printHeight - Convert.ToUInt32(pictureBox1.Image.Height)) / 2;[/align]
[align=left] //使用DrawImage方法重新绘制图片[/align]
[align=left] e.Graphics.DrawImage(Image.FromFile(images), x, y, Convert.ToUInt32(pictureBox1.Image.Width), Convert.ToUInt32(pictureBox1.Image.Height));[/align]
[align=left] }[/align]
[align=left] else[/align]
[align=left] {[/align]
[align=left] //判断图片的宽度是否大于纸张的宽度[/align]
[align=left] if (Convert.ToUInt32(pictureBox1.Image.Width) > printWidth)[/align]
[align=left] {[/align]
[align=left] //宽度大于高度则让图片旋转90度垂直显示[/align]
[align=left] Bitmap bitmap = (Bitmap)Bitmap.FromFile(images);[/align]
[align=left] bitmap.RotateFlip(RotateFlipType.Rotate90FlipXY);[/align]
[align=left] //实例化对象[/align]
[align=left] PictureBox pb = new PictureBox();[/align]
[align=left] //设置Image属性[/align]
[align=left] pb.Image = bitmap;[/align]
[align=left] //计算图片高度占纸张宽度的比例[/align]
[align=left] Single a = printWidth / Convert.ToSingle(pictureBox1.Image.Height);[/align]
[align=left] //重新绘制图片[/align]
[align=left] e.Graphics.DrawImage(pb.Image, 0, 0, Convert.ToSingle(pictureBox1.Image.Height) * a, Convert.ToSingle(pictureBox1.Image.Width) * a);[/align]
[align=left] }[/align]
[align=left] else[/align]
[align=left] {[/align]
[align=left] //计算图片高度占纸张宽度的比例[/align]
[align=left] Single a = printWidth / Convert.ToSingle(pictureBox1.Image.Width);[/align]
[align=left] //重新绘制[/align]
[align=left] e.Graphics.DrawImage(Image.FromFile(images), 0, 0, Convert.ToSingle(pictureBox1.Image.Width) * a, Convert.ToSingle(pictureBox1.Image.Height) * a);[/align]
[align=left] }[/align]
[align=left] }[/align]
}
错误提示:
錯誤 1 最符合的多載方法 'System.Drawing.Image.FromFile(string)' 有一些無效的引數 E:/个人信息/画圆/画圆/Form1.cs 184 38 画圆
錯誤 2 引數 '1': 無法從 'System.Drawing.Image' 轉換為 'string' E:/个人信息/画圆/画圆/Form1.cs 184 53 画圆
錯誤 3 最符合的多載方法 'System.Drawing.Image.FromFile(string)' 有一些無效的引數 E:/个人信息/画圆/画圆/Form1.cs 192 45 画圆
錯誤 4 引數 '1': 無法從 'System.Drawing.Image' 轉換為 'string' E:/个人信息/画圆/画圆/Form1.cs 192 61 画圆
錯誤 5 最符合的多載方法 'System.Drawing.Image.FromFile(string)' 有一些無效的引數 E:/个人信息/画圆/画圆/Form1.cs 208 42 画圆
錯誤 6 引數 '1': 無法從 'System.Drawing.Image' 轉換為 'string' E:/个人信息/画圆/画圆/Form1.cs 208 57 画圆
请大家帮忙看看!谢谢!
相关文章推荐
- 图片打印丢失问题,大家请帮忙!(100分)
- delphi平台的贪吃蛇游戏,有点小问题,请大家帮忙看一下谢谢
- 寻找silverlight高手帮忙解决问题,谢谢,
- Android 解决在图片库删除图片后,无法实时刷新问题的解决!
- 个人参与的网站 求测试。帮忙看看有没什么大问题。高并发等
- 关于应付款问题,请各位大侠帮忙,谢谢!~
- achartengine之折线图---简单用法(续二)---(动态刷新)图形嵌套在页面(有问题请大家帮忙看看),已解决问题
- 一个ASP.NET2.0的问题,实在无法解决,请大家帮忙看看(放在首页一天后撤下,请DUDU原谅)问题已经解~~^_^
- 关于图像绘制并输出的问题,大家帮忙看看
- delphi平台的贪吃蛇游戏,有点小问题,请大家帮忙看一下谢谢
- 自己写的一个数据访问类,请高手帮忙看看!谢谢!
- 做过java串口通讯的朋友帮忙看看,先谢谢了
- Silverlight打印图片不全的问题
- 请各位帮忙看看这个内存泄漏问题,该如何解决?BSTR
- 想让图片居中打印?看看我是怎么做的!
- delphi平台的贪吃蛇游戏,有点小问题,请大家帮忙看一下谢谢
- android简单打图片下载帮忙看看有那些补充打
- 我是新手,大家帮忙看看这个问题怎样解决,小弟先谢啦
- 各位大牛帮忙看看问题出来哪?自己实现一个数组模板类,编译无法通过
- 遇到adv目录下的图片在网页不显示问题的可以进来看看