zoukankan      html  css  js  c++  java
  • C# 将容器内容转成图片导出

    ///   将容器内容转成图片导出,这里的controller就是this
            /// </summary>
            private void OutTheControllerToPic()
            {
     
                Bitmap bitmap = new Bitmap( this.Width, this .Height);
                DrawToBitmap( this, bitmap, new Rectangle(0, 0, this.Width, this .Height));
                bool isSave = true ;
                SaveFileDialog saveImageDialog = new SaveFileDialog();
                saveImageDialog.Title = "图片保存" ;
                saveImageDialog.Filter = @"png|*.png|jpeg|*.jpg|bmp|*.bmp|gif|*.gif" ;
                if (saveImageDialog.ShowDialog() == DialogResult.OK)
                {
                    string fileName = saveImageDialog.FileName.ToString();
                    if (fileName != "" && fileName != null)
                    {
                        string fileExtName = fileName.Substring(fileName.LastIndexOf(".") + 1).ToString();
                        System.Drawing.Imaging. ImageFormat imgformat = null ;
                        if (fileExtName != "" )
                        {
                            switch (fileExtName)
                            {
                                case "jpg" :
                                    imgformat = System.Drawing.Imaging. ImageFormat.Jpeg;
                                    break;
                                case "bmp" :
                                    imgformat = System.Drawing.Imaging. ImageFormat.Bmp;
                                    break;
                                case "gif" :
                                    imgformat = System.Drawing.Imaging. ImageFormat.Gif;
                                    break;
                                case "png" :
                                    imgformat = System.Drawing.Imaging. ImageFormat.Png;
                                    break;
                                default:
                                    MessageBox.Show("只能存取为: jpg,bmp,gif,png 格式" );
                                    isSave = false;
                                    break;
                            }
                        }
                        //默认保存为JPG格式  
                        if (imgformat == null )
                        {
                            imgformat = System.Drawing.Imaging. ImageFormat.Jpeg;
                        }
                        if (isSave)
                        {
                            try
                            {
                                bitmap.Save(fileName, imgformat);
                                MessageBox.Show("图片已经成功保存!" );
                            }
                            catch
                            {
                                MessageBox.Show("保存失败,你还没有截取过图片或已经清空图片!" );
                            }
                        }
                    }
                }
            }
            [ DllImport("user32.dll" , CharSet = CharSet.Auto)]
            public static extern int SendMessage(IntPtr hWnd, int msg, int wParam, int lParam);
            [ DllImport("user32.dll" , CharSet = CharSet.Auto)]
            public static extern IntPtr SendMessage(HandleRef hWnd, int msg, IntPtr wParam, IntPtr lParam);
            [ DllImport("gdi32.dll" , CharSet = CharSet.Auto, SetLastError = true, ExactSpelling = true )]
            public static extern bool BitBlt(HandleRef hDC, int x, int y, int nWidth, int nHeight, HandleRef hSrcDC, int xSrc, int ySrc, int dwRop);
            /// <summary>
            /// 支持呈现到指定的位图。
            /// </summary>
            public static Bitmap DrawToBitmap( Control control, Bitmap bitmap, Rectangle targetBounds)
            {
                if (bitmap == null )
                {
                    throw new ArgumentNullException( "bitmap");
                }
                if (((targetBounds.Width <= 0) || (targetBounds.Height <= 0)) || ((targetBounds.X < 0) || (targetBounds.Y < 0)))
                {
                    throw new ArgumentException( "targetBounds");
                }
                Bitmap image = new Bitmap(control.Width, control.Height, bitmap.PixelFormat);
                using (Graphics graphics = Graphics.FromImage(image))
                {
                    IntPtr hdc = graphics.GetHdc();
                    SendMessage( new HandleRef (control, control.Handle), 0x317, hdc, (IntPtr)30);
                    using (Graphics graphics2 = Graphics.FromImage(bitmap))
                    {
                        IntPtr handle = graphics2.GetHdc();
                        BitBlt( new HandleRef (graphics2, handle), 0, 0, control.Width, control.Height, new HandleRef(graphics, hdc), targetBounds.X, targetBounds.Y,
    0xcc0020);
                        graphics2.ReleaseHdcInternal(handle);
                    }
                    graphics.ReleaseHdcInternal(hdc);
                }
                return image;
            }
  • 相关阅读:
    20191024-1 每周例行报告
    萌猿纵横字谜引擎实现过程
    Blender插件加载研究
    Blender插件初始化范例
    Blender插件编写指南
    Blender之Property
    Blender之UILayout
    Blender插件之Panel
    Blender插件之操作器(Operator)实战
    向量之基底
  • 原文地址:https://www.cnblogs.com/yanjinliang/p/5916440.html
Copyright © 2011-2022 走看看