您的位置:首页 > 移动开发 > Objective-C

实时打印图片的问题,请同学和老师们帮忙看看,谢谢

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 画圆

 
 
请大家帮忙看看!谢谢!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐