DevExpress.chartContro控件保存图片和打印图片

        private void pictureBox1_Click(object sender, EventArgs e)
        {
            ////实例化打印对象
            PrintDocument print = new PrintDocument();
            //打印事件
            print.PrintPage += new PrintPageEventHandler(print_PrintPage);
            //开始打印
            PrintDialog pd = new PrintDialog();
            if (pd.ShowDialog() == DialogResult.OK)
            {
                //print.PrinterSettings.DefaultPageSettings.Landscape = true;
                print.Print();
            }
            //打印之后删除保存在本地的图片
             print.EndPrint += new PrintEventHandler(print_EndPrint);             
        }

        /// <summary>
        ///  LabHemodialysis产生的图保存的本地,并且获取
        /// </summary>
        /// <returns></returns>
        private Image get_Image() {
            Bitmap bmp;
            if (str_ItemName.Contains("/"))
            {
                string str_ItemNameRelapce = str_ItemName.Replace("/", "");
                LabHemodialysis.ExportToImage(@"C:\" + str_ItemNameRelapce + ".Jpeg", System.Drawing.Imaging.ImageFormat.Jpeg);
                bmp = new Bitmap(@"C:\" + str_ItemNameRelapce + ".Jpeg");
            }
            else {
                //保存到c盘        
                LabHemodialysis.ExportToImage(@"C:\" + str_ItemName + ".Jpeg", System.Drawing.Imaging.ImageFormat.Jpeg);
                //从c盘获取图片
                bmp = new Bitmap(@"C:\" + str_ItemName + ".Jpeg");
            }
           return bmp;
        }
        //删除本地保存的图片
        private void delete_Image()
        {
            System.IO.FileInfo file = new System.IO.FileInfo(@"C:\" + str_ItemName + ".Jpeg");
            if (file.Exists)
            {
                file.Delete();
            }  
        }
        private void print_EndPrint(object sender, PrintEventArgs e)
        {
            delete_Image();
        }
       private void print_PrintPage(object sender, PrintPageEventArgs e)
        {

            Image img = get_Image();
            Image rotataImage = Rotate((Bitmap)img, 90);
            e.Graphics.DrawImage(rotataImage,0,0); 

        }
       /// <summary>
       /// 以逆时针为方向对图像进行旋转
       /// </summary>
       /// <param name="b">位图流</param>
       /// <param name="angle">旋转角度[0,360](前台给的)</param>
       /// <returns></returns>
       private Bitmap Rotate(Bitmap b, int angle)
       {
           angle = angle % 360;
           //弧度转换
           double radian = angle * Math.PI / 180.0;
           double cos = Math.Cos(radian);
           double sin = Math.Sin(radian);
           //原图的宽和高
           int w = b.Width;
           int h = b.Height;
           int W = (int)(Math.Max(Math.Abs(w * cos - h * sin), Math.Abs(w * cos + h * sin)));
           int H = (int)(Math.Max(Math.Abs(w * sin - h * cos), Math.Abs(w * sin + h * cos)));
           //目标位图
           Bitmap dsImage = new Bitmap(W, H);
           System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(dsImage);
           g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.Bilinear;
           g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
           //计算偏移量
           Point Offset = new Point((W - w) / 2, (H - h) / 2);
           //构造图像显示区域:让图像的中心与窗口的中心点一致
           Rectangle rect = new Rectangle(Offset.X, Offset.Y, w, h);
           Point center = new Point(rect.X + rect.Width / 2, rect.Y + rect.Height / 2);
           g.TranslateTransform(center.X, center.Y);
           g.RotateTransform(360 - angle);
           //恢复图像在水平和垂直方向的平移
           g.TranslateTransform(-center.X, -center.Y);
           g.DrawImage(b, rect);
           //重至绘图的所有变换
           g.ResetTransform();
           g.Save();
           g.Dispose();
           //dsImage.Save("yuancd.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
           return dsImage;
       }
     

 

        private string printName;//打印的名称
        private void boxSava_Click(object sender, EventArgs e)
        {
            SaveFileDialog sf = new SaveFileDialog();
            sf.Filter = "Image files(*.jpeg,*.gif)|*.jpeg;*.gif";
            sf.Title = "趋势图导出";
            sf.FileName = str_ItemName+"("+DateTime.Now+")"+"趋势图";
            printName = sf.FileName;
            if (sf.ShowDialog() == DialogResult.OK)
            {
               
                LabHemodialysis.ExportToImage(sf.FileName, System.Drawing.Imaging.ImageFormat.Jpeg);
            }
        }

 

posted @ 2016-06-24 13:35  WangJunZzz  阅读(2039)  评论(0编辑  收藏  举报