BitmapSource 和 Bitmap 之间的转换方法
在开发中,经常会涉及到图像的处理和显示。.NET Framework提供了两个常用的类,即BitmapSource和Bitmap,用于处理和显示图像。BitmapSource是一个抽象类,表示可读取的位图图像,而Bitmap是一个具体类,表示位图图像的像素数据。由于BitmapSource和Bitmap之间的类型不同,因此在使用过程中需要进行相互之间的转换。1. BitmapSource 转换为 Bitmap要将BitmapSource转换为Bitmap,可以使用以下代码:csharppublic static Bitmap BitmapSourceToBitmap(BitmapSource bitmapSource){ Bitmap bitmap; using (MemoryStream stream = new MemoryStream()) { BitmapEncoder encoder = new BmpBitmapEncoder(); encoder.Frames.Add(BitmapFrame.Create(bitmapSource)); encoder.Save(stream); bitmap = new Bitmap(stream); } return bitmap;}在上述代码中,首先创建一个MemoryStream对象,用于保存位图数据。然后,创建一个BmpBitmapEncoder对象,并将BitmapSource添加到编码器的帧集合中。接下来,通过调用编码器的Save方法,将位图数据保存到MemoryStream中。最后,使用MemoryStream初始化Bitmap对象,并返回转换后的Bitmap。2. Bitmap 转换为 BitmapSource要将Bitmap转换为BitmapSource,可以使用以下代码:csharppublic static BitmapSource BitmapToBitmapSource(Bitmap bitmap){ IntPtr hBitmap = bitmap.GetHbitmap(); BitmapSource bitmapSource = Imaging.CreateBitmapSourceFromHBitmap(hBitmap, IntPtr.Zero, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions()); // 释放GDI资源 NativeMethods.DeleteObject(hBitmap); return bitmapSource;}private static class NativeMethods{ [DllImport("gdi32.dll", SetLastError = true)] public static extern bool DeleteObject(IntPtr hObject);}在上述代码中,首先通过调用Bitmap的GetHbitmap方法,获取位图的句柄。然后,使用Imaging类的CreateBitmapSourceFromHBitmap方法,将位图句柄转换为BitmapSource对象。最后,通过调用NativeMethods类中的DeleteObject方法释放GDI资源,并返回转换后的BitmapSource。3. 示例代码以下是一个示例代码,演示了如何在WPF应用程序中将BitmapSource和Bitmap之间进行转换:csharpprivate void ConvertBitmapSourceToBitmap(){ // 从资源文件中加载BitmapSource BitmapSource bitmapSource = (BitmapSource)Application.Current.FindResource("MyBitmapSource"); // 将BitmapSource转换为Bitmap Bitmap bitmap = BitmapHelper.BitmapSourceToBitmap(bitmapSource); // 在PictureBox中显示Bitmap pictureBox.Image = bitmap;}private void ConvertBitmapToBitmapSource(){ // 从文件中加载Bitmap Bitmap bitmap = new Bitmap("path/to/image.jpg"); // 将Bitmap转换为BitmapSource BitmapSource bitmapSource = BitmapHelper.BitmapToBitmapSource(bitmap); // 在Image控件中显示BitmapSource image.Source = bitmapSource;}在上述代码中,ConvertBitmapSourceToBitmap方法演示了如何将BitmapSource转换为Bitmap,并将转换后的Bitmap显示在PictureBox中。ConvertBitmapToBitmapSource方法演示了如何将Bitmap转换为BitmapSource,并将转换后的BitmapSource显示在Image控件中。通过以上方法,我们可以在BitmapSource和Bitmap之间进行相互转换。这在图像处理和显示的开发中非常有用,可以帮助我们方便地在不同的场景中使用不同的图像类。使用上述的转换方法,我们可以轻松地在WPF应用程序中处理和显示图像。Copyright © 2025 IZhiDa.com All Rights Reserved.
知答 版权所有 粤ICP备2023042255号