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;
        }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM