c# Bitmap轉bitmapImage高效方法
網上有很多人都記錄以下方法進行轉換,這個方法存在一個問題,就是低效,我在進行圖片拼接時,圖片大瞭之後就會很慢。所以我有找瞭一個高效的替代方法。
public BitmapImage BitmapToBitmapImage(System.Drawing.Bitmap bitmap) { System.Drawing.Bitmap bitmapSource = new System.Drawing.Bitmap(bitmap.Width, bitmap.Height); int i, j; for (i = 0; i < bitmap.Width; i++) for (j = 0; j < bitmap.Height; j++) { System.Drawing.Color pixelColor = bitmap.GetPixel(i, j); System.Drawing.Color newColor = System.Drawing.Color.FromArgb(pixelColor.R, pixelColor.G, pixelColor.B); bitmapSource.SetPixel(i, j, newColor); } MemoryStream ms = new MemoryStream(); bitmapSource.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp); BitmapImage bitmapImage = new BitmapImage(); bitmapImage.BeginInit(); bitmapImage.StreamSource = new MemoryStream(ms.ToArray()); bitmapImage.EndInit(); return bitmapImage; }
這種方法快多瞭。趕緊快去試試吧:
public BitmapImage ToBitmapImage(System.Drawing.Bitmap ImageOriginal) { System.Drawing.Bitmap ImageOriginalBase = new System.Drawing.Bitmap(ImageOriginal); BitmapImage bitmapImage = new BitmapImage(); using (System.IO.MemoryStream ms = new System.IO.MemoryStream()) { ImageOriginalBase.Save(ms, System.Drawing.Imaging.ImageFormat.Png); bitmapImage.BeginInit(); bitmapImage.StreamSource = ms; bitmapImage.CacheOption = BitmapCacheOption.OnLoad; bitmapImage.EndInit(); bitmapImage.Freeze(); } return bitmapImage; }
補:C# Byte[]、Image、Bitmap 之間的相互轉換
/// <summary> /// 將圖片Image轉換成Byte[] /// </summary> /// <param name="Image">image對象</param> /// <param name="imageFormat">後綴名</param> /// <returns></returns> public static byte[] ImageToBytes(Image Image, System.Drawing.Imaging.ImageFormat imageFormat) { if (Image == null) { return null; } byte[] data = http://www.cnblogs.com/peasana/archive/2012/02/13/null; using (MemoryStream ms= new MemoryStream()) { using (Bitmap Bitmap = new Bitmap(Image)) { Bitmap.Save(ms, imageFormat); ms.Position = 0; data = http://www.cnblogs.com/peasana/archive/2012/02/13/new byte[ms.Length]; ms.Read(data, 0, Convert.ToInt32(ms.Length)); ms.Flush(); } } return data; } /// <summary> /// byte[]轉換成Image /// </summary> /// <param name="byteArrayIn">二進制圖片流</param> /// <returns>Image</returns> public static System.Drawing.Image byteArrayToImage(byte[] byteArrayIn) { if (byteArrayIn == null) return null; using (System.IO.MemoryStream ms = new System.IO.MemoryStream(byteArrayIn)) { System.Drawing.Image returnImage = System.Drawing.Image.FromStream(ms); ms.Flush(); return returnImage; } } //Image轉換Bitmap 1. Bitmap img = new Bitmap(imgSelect.Image); 2. Bitmap bmp = (Bitmap)pictureBox1.Image; //Bitmap轉換成Image using System.IO; private static System.Windows.Controls.Image Bitmap2Image(System.Drawing.Bitmap Bi) { MemoryStream ms = new MemoryStream(); Bi.Save(ms, System.Drawing.Imaging.ImageFormat.Png); BitmapImage bImage = new BitmapImage(); bImage.BeginInit(); bImage.StreamSource = new MemoryStream(ms.ToArray()); bImage.EndInit(); ms.Dispose(); Bi.Dispose(); System.Windows.Controls.Image i = new System.Windows.Controls.Image(); i.Source = bImage; return i ; } //byte[] 轉換 Bitmap public static Bitmap BytesToBitmap(byte[] Bytes) { MemoryStream stream = null; try { stream = new MemoryStream(Bytes); return new Bitmap((Image)new Bitmap(stream)); } catch (ArgumentNullException ex) { throw ex; } catch (ArgumentException ex) { throw ex; } finally { stream.Close(); } } //Bitmap轉byte[] public static byte[] BitmapToBytes(Bitmap Bitmap) { MemoryStream ms = null; try { ms = new MemoryStream(); Bitmap.Save(ms, Bitmap.RawFormat); byte[] byteImage = new Byte[ms.Length]; byteImage = ms.ToArray(); return byteImage; } catch (ArgumentNullException ex) { throw ex; } finally { ms.Close(); } } }
到此這篇關於c# Bitmap 轉bitmapImage高效方法的文章就介紹到這瞭,更多相關c# Bitmap 轉bitmapImage內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- C#實現截圖幫助類
- C# wpf Bitmap轉換成WriteableBitmap的方法
- C# Bitmap圖像處理(含增強對比度的三種方法)
- C#實現封面圖片生成器的示例代碼
- C# MemoryStream類案例詳解