WPF控件保存为图片Bitmap

        #region  控件保存为图片--放大图
        /// <summary>
        /// 控件保存为图片--可处理放大图
        /// </summary>
        /// <param name="element"></param>
        /// <returns></returns>
        public static Bitmap CreateNotRanderElementScreenshot(FrameworkElement element,  double MatrixTransform=1)
        {
            var wantRanderSize = new System.Windows.Size(Math.Truncate(element.ActualWidth * MatrixTransform), Math.Truncate(element.ActualHeight * MatrixTransform));
            element.Measure(wantRanderSize);
            element.SnapsToDevicePixels = true;
            element.Arrange(new Rect(new System.Windows.Point(0, 0), wantRanderSize));
             return CreateElementScreenshot(element, Convert.ToInt32(Math.Truncate(element.ActualWidth * MatrixTransform)), Convert.ToInt32(Math.Truncate(element.ActualHeight * MatrixTransform)));
        }


        private static Bitmap CreateElementScreenshot(Visual visual, int sWidth, int sHeight)
        {

            RenderTargetBitmap bmp = new RenderTargetBitmap(sWidth, sHeight, 96, 96, PixelFormats.Default);
            //RenderTargetBitmap bmp = new RenderTargetBitmap((int)RenderSize.Width, (int)RenderSize.Height, 96, 96, PixelFormats.Default);
            bmp.Render(visual);


            Bitmap bitmap = new Bitmap(bmp.PixelWidth, bmp.PixelHeight, System.Drawing.Imaging.PixelFormat.Format32bppArgb);

            BitmapData data = bitmap.LockBits(new System.Drawing.Rectangle(System.Drawing.Point.Empty, bitmap.Size), ImageLockMode.WriteOnly,
                System.Drawing.Imaging.PixelFormat.Format32bppArgb);
            bmp.CopyPixels(Int32Rect.Empty, data.Scan0, data.Height * data.Stride, data.Stride);
            bitmap.UnlockBits(data);

            //bitmap.Save(@"D:\TestCode\WpfDragMoveTest\SerialPortPrint\bin\Debug\5555.png", ImageFormat.Png);


            return bitmap;
        }
        #endregion 

猜你喜欢

转载自www.cnblogs.com/xunyiHe/p/10538910.html