wpf中怎么获取image上的图并转化为bitmap
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了wpf中怎么获取image上的图并转化为bitmap相关的知识,希望对你有一定的参考价值。
参考技术A 1.从bitmap转换成ImageSource[DllImport("gdi32.dll", SetLastError = true)]
private static extern bool DeleteObject(IntPtr hObject);
/// <summary>
/// 从bitmap转换成ImageSource
/// </summary>
/// <param name="icon"></param>
/// <returns></returns>
public static ImageSource ChangeBitmapToImageSource(Bitmap bitmap)
//Bitmap bitmap = icon.ToBitmap();
IntPtr hBitmap = bitmap.GetHbitmap();
ImageSource wpfBitmap = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(
hBitmap,
IntPtr.Zero,
Int32Rect.Empty,
BitmapSizeOptions.FromEmptyOptions());
if (!DeleteObject(hBitmap))
throw new System.ComponentModel.Win32Exception();
return wpfBitmap;
2.从Bitmap转换成BitmapSource
/// <summary>
/// 从Bitmap转换成BitmapSource
/// </summary>
/// <param name="bmp"></param>
/// <returns></returns>
public static BitmapSource ChangeBitmapToBitmapSource(this Bitmap bmp)
BitmapSource returnSource;
try
returnSource = Imaging.CreateBitmapSourceFromHBitmap(bmp.GetHbitmap(),IntPtr.Zero, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions());
catch
returnSource = null;
return returnSource;
3.从Icon到ImageSource的转换
/// <summary>
/// 从Icon到ImageSource的转换
/// </summary>
public ImageSource ChangeIconToImageSource( Icon icon)
ImageSource imageSource = System.Windows.Interop.Imaging.CreateBitmapSourceFromHIcon(
icon.Handle,
Int32Rect.Empty,
BitmapSizeOptions.FromEmptyOptions());
return imageSource;
4.从Icon到ImageSource的转换
internal static class IconUtilities
[DllImport("gdi32.dll", SetLastError = true)]
private static extern bool DeleteObject(IntPtr hObject);
public static ImageSource ToImageSource(this Icon icon)
Bitmap bitmap = icon.ToBitmap();
IntPtr hBitmap = bitmap.GetHbitmap();
ImageSource wpfBitmap = Imaging.CreateBitmapSourceFromHBitmap(
hBitmap,
IntPtr.Zero,
Int32Rect.Empty,
BitmapSizeOptions.FromEmptyOptions());
if (!DeleteObject(hBitmap))
throw new Win32Exception();
return wpfBitmap;
// 这个是没有附加转换的,:)
public static ImageSource ToImageSource(this Icon icon)
ImageSource imageSource = Imaging.CreateBitmapSourceFromHIcon(
icon.Handle,
Int32Rect.Empty,
BitmapSizeOptions.FromEmptyOptions());
return imageSource;
调用:ImageSource wpfBitmap = img.ToImageSource();
WPF的控件没有句柄,但是有啥其他间接方法获得WPF控件的句柄啊。
我要在WPF窗体中同时控制一个按钮和一个image,在image里放置3D场景,我要把image的句柄传给3D场景,以保证3D场景能在WPF窗体中呈现,并且可以操纵2D按钮,请高手不吝赐教啊!
using System.Windows.Interop; //使用WindowInteropHelper类可以获得窗体句柄 int handle = new WindowInteropHelper(this).Handle.ToInt32();我们在项目中使用WPF开发程序,需要调用一个Activex控件,显示三维的场景,但是需要把当前窗口的句柄传递给OCX控件,WPF窗口本身没有句柄属性,需要通过如下的方式实现转换int handle = new WindowInteropHelper(this).Handle.ToInt32();
//this代表当前的窗口 参考技术A 1.窗体:
IntPtr hwnd = new WindowInteropHelper(this).Handle;
2.控件:
IntPtr hwnd = ((HwndSource)PresentationSource.FromVisual(uielement)).Handle;
句柄的取得不要在构造 函数中取得,此时的vitual还没有产生,在Loaded中 就可以了。 参考技术B 试试:varhwndSource=(System.Windows.Interop.HwndSource)PresentationSource.FromDependencyObject(dependecyObject);
IntPtrhandle=hwndSource.Handle 参考技术C WPF的控件是没有句柄的,因为和普通的winform不一样,WPF的控件是“画”上去的,只有整个窗体的句柄
以上是关于wpf中怎么获取image上的图并转化为bitmap的主要内容,如果未能解决你的问题,请参考以下文章
Springboot读取Resource资源文件并转化为MultipartFile和File
java 获取当前时间并转化为yyyy-MM-dd HH:mm:ss格式
[解决方法] Java-Class.forName() 反射/映射子类 并转化为父类/接口