using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Media; using System.Windows; using System.Windows.Media.Imaging; using System.Windows.Controls; namespace Txgy.EWS.Client.Common.Helpers { public static class BitmapHelper { public static BitmapImage ConvertToBitmap(byte[] bytes) { var bitmapImage = new BitmapImage(); bitmapImage.BeginInit(); bitmapImage.StreamSource = new MemoryStream(bytes); bitmapImage.EndInit(); return bitmapImage; } public static byte[] ConvertToBytes(BitmapSource bitmapSource) { byte[] buffer = null; PngBitmapEncoder encoder = new PngBitmapEncoder(); MemoryStream memoryStream = new MemoryStream(); encoder.Frames.Add(BitmapFrame.Create(bitmapSource)); encoder.Save(memoryStream); memoryStream.Position = 0; if (memoryStream.Length > 0) { using (BinaryReader br = new BinaryReader(memoryStream)) { buffer = br.ReadBytes((int)memoryStream.Length); } } memoryStream.Close(); return buffer; } public static BitmapImage ConvertToBitmap(BitmapSource bitmapSource) { PngBitmapEncoder encoder = new PngBitmapEncoder(); MemoryStream memoryStream = new MemoryStream(); BitmapImage bImg = new BitmapImage(); encoder.Frames.Add(BitmapFrame.Create(bitmapSource)); encoder.Save(memoryStream); memoryStream.Position = 0; bImg.BeginInit(); bImg.StreamSource = memoryStream; bImg.EndInit(); memoryStream.Close(); return bImg; } public static byte[] BitmapImageToBytes(BitmapImage bmp) { byte[] buffer = null; try { Stream stream = bmp.StreamSource; if (stream != null && stream.Length > 0) { //很重要,因为Position经常位于Stream的末尾,导致下面读取到的长度为0。 stream.Position = 0; using (BinaryReader br = new BinaryReader(stream)) { buffer = br.ReadBytes((int)stream.Length); } } } catch (Exception ex) { Console.WriteLine(ex.Message); } return buffer; } public static byte[] ElementToBytes(UIElement element) { var rect = new Rect(element.RenderSize); var visual = new DrawingVisual(); using (var dc = visual.RenderOpen()) { dc.DrawRectangle(new VisualBrush(element), null, rect); } var bitmap = new RenderTargetBitmap( (int)rect.Width, (int)rect.Height, 96, 96, PixelFormats.Default); bitmap.Render(visual); return BitmapHelper.ConvertToBytes(bitmap); } public static void SaveImageToFile(UIElement element, string fileName) { var rect = new Rect(element.RenderSize); System.IO.FileStream fs = new System.IO.FileStream(fileName, System.IO.FileMode.Create); RenderTargetBitmap bmp = new RenderTargetBitmap((int)rect.X, (int)rect.Y, 96d, 96d, PixelFormats.Pbgra32); bmp.Render(element); BitmapEncoder encoder = new PngBitmapEncoder(); encoder.Frames.Add(BitmapFrame.Create(bmp)); encoder.Save(fs); fs.Close(); } } }