private void convertBitmapToBitmapSource_Click(object sender, EventArgs e)
{
using (System.Drawing.Bitmap bitmap = new System.Drawing.Bitmap("bitmap_to_bitmapsource.jpg"))
{
System.Windows.Media.Imaging.BitmapSource bitmapSource = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(
bitmap.GetHbitmap(),
IntPtr.Zero,
Int32Rect.Empty,
System.Windows.Media.Imaging.BitmapSizeOptions.FromEmptyOptions());
image.Source = bitmapSource;
}
}
private void convertBitmapSourceToBitmap_Click(object sender, EventArgs e)
{
using(Stream stm = File.Open("bitmapsource_to_bitmap.jpg", FileMode.Open, FileAccess.Read))
{
// Since we're not specifying a System.Windows.Media.Imaging.BitmapCacheOption, the pixel format
// will be System.Windows.Media.PixelFormats.Pbgra32.
System.Windows.Media.Imaging.BitmapSource bitmapSource = System.Windows.Media.Imaging.BitmapFrame.Create(
stm,
System.Windows.Media.Imaging.BitmapCreateOptions.None,
System.Windows.Media.Imaging.BitmapCacheOption.OnLoad);
// Scale the image so that it will display similarly to the WPF Image.
double newWidthRatio = picture.Width / (double)bitmapSource.PixelWidth;
double newHeightRatio = ((picture.Width * bitmapSource.PixelHeight) / (double)bitmapSource.PixelWidth) / (double)bitmapSource.PixelHeight;
System.Windows.Media.Imaging.BitmapSource transformedBitmapSource = new System.Windows.Media.Imaging.TransformedBitmap(
bitmapSource,
new System.Windows.Media.ScaleTransform(newWidthRatio, newHeightRatio));
int width = transformedBitmapSource.PixelWidth;
int height = transformedBitmapSource.PixelHeight;
int stride = width * ((transformedBitmapSource.Format.BitsPerPixel + 7) / 8);
byte[] bits = new byte[height * stride];
transformedBitmapSource.CopyPixels(bits, stride, 0);
unsafe
{
fixed (byte* pBits = bits)
{
IntPtr ptr = new IntPtr(pBits);
System.Drawing.Bitmap bitmap = new System.Drawing.Bitmap(
width,
height,
stride,
System.Drawing.Imaging.PixelFormat.Format32bppPArgb,
ptr);
picture.Image = bitmap;
}
}
}
}
本文介绍如何将System.Drawing.Bitmap类型转换为WPF中的BitmapSource类型,并反向转换的方法。通过使用不同的.NET框架类,实现了两种图片格式之间的互转,适用于需要在WPF应用程序中处理不同类型图像的应用场景。
2466

被折叠的 条评论
为什么被折叠?



