#region Bitmap 转为位图
///
/// Bitmap 转为位图
///
/// Bitmap 对象
/// ImageSource 位图对象
public static ImageSource BitmapToImageSource(System.Drawing.Bitmap bitmap)
{
try
{
IntPtr intPtr = bitmap.GetHbitmap();
ImageSource imageSource = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(intPtr,IntPtr.Zero,Int32Rect.Empty,BitmapSizeOptions.FromEmptyOptions());
return imageSource;
}
catch (Exception ex)
{
WriteLog.WriteErrorInfo(ex);
}
return null;
}
#endregion
#region ImageSource 转为Bitmap
///
/// ImageSource 转为Bitmap
///
/// imageSource 对象
/// 返回 Bitmap 对象
public static System.Drawing.Bitmap ImageSourceToBitmap(ImageSource imageSource)
{
try
{
BitmapSource bitmapSource = (BitmapSource)imageSource;
System.Drawing.Bitmap bitmap = new System.Drawing.Bitmap(bitmapSource.PixelWidth, bitmapSource.PixelHeight, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
System.Drawing.Imaging.BitmapData data = bitmap.LockBits(new System.Drawing.Rectangle(System.Drawing.Point.Empty, bitmap.Size),System.Drawing.Imaging.ImageLockMode.WriteOnly,System.Drawing.Imaging.PixelFormat.Format32bppArgb);
bitmapSource.CopyPixels(Int32Rect.Empty,data.Scan0,data.Height*data.Stride,data.Stride);
bitmap.UnlockBits(data);
return bitmap;
}
catch (Exception ex)
{
WriteLog.WriteErrorInfo(ex);
}
return null;
}
#endregion
#region Bitmap 转 BitmapImage
///
/// Bitmap 转 BitmapImage
///
/// Bitmap 对象
/// 转换后的 BitmapImage对象
public static BitmapImage BitmapToBitmapImage(System.Drawing.Bitmap bitmap)
{
try
{
BitmapImage relust = new BitmapImage();
using (MemoryStream memoryStream=new MemoryStream())
{
MemoryStream memory = new MemoryStream();
bitmap.Save(memoryStream, System.Drawing.Imaging.ImageFormat.Png);
memoryStream.Position = 0;
relust.BeginInit();
relust.CacheOption = BitmapCacheOption.OnLoad;
memoryStream.CopyTo(memory);
relust.StreamSource = memory;
relust.EndInit();
relust.Freeze();
return relust;
}
}
catch (Exception ex)
{
WriteLog.WriteErrorInfo(ex);
}
return null;
}
#endregion
#region BitmapImage 转为byte[]
///
/// BitmapImage 转为byte[]
///
/// BitmapImage 对象
/// byte[] 数组
public static byte[] BitmapImageToByteArray(BitmapImage bitmapImage)
{
byte[] buffer = new byte[] { };
try
{
Stream stream = bitmapImage.StreamSource;
if (stream!=null&& stream.Length>0)
{
stream.Position = 0;
using (BinaryReader binary=new BinaryReader(stream))
{
buffer = binary.ReadBytes((int)stream.Length);
}
}
}
catch (Exception ex)
{
WriteLog.WriteErrorInfo(ex);
}
return buffer;
}
#endregion
#region 图片压缩
///
/// 图片压缩
///
/// 要压缩的源图像
/// 要求的高
/// 要求的宽
///
public static System.Drawing.Bitmap GetPicThumbnail(System.Drawing.Bitmap bitmap , int height, int width)
{
try
{
lock (bitmap)
{
System.Drawing.Bitmap iSource = bitmap;
System.Drawing.Imaging.ImageFormat imageFormat = iSource.RawFormat;
int sw = width, sh = height;
//按比例缩放
System.Drawing.Bitmap ob = new System.Drawing.Bitmap(width, height);
System.Drawing.Graphics graphics = System.Drawing.Graphics.FromImage(ob);
graphics.Clear(System.Drawing.Color.WhiteSmoke);
graphics.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
graphics.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
graphics.DrawImage(iSource,new System.Drawing.Rectangle((width-sw)/2,(height-sh)/2,sw,sh),0,0,iSource.Width,iSource.Height,System.Drawing.GraphicsUnit.Pixel);
graphics.Dispose();
return ob;
}
}
catch (Exception ex)
{
WriteLog.WriteErrorInfo(ex);
}
return bitmap;
}
#endregion