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() 反射/映射子类 并转化为父类/接口

在WPF中如何实现image控件填充整个窗体

WPF的控件没有句柄,但是有啥其他间接方法获得WPF控件的句柄啊。

WPF的控件没有句柄,但是有啥其他间接方法获得WPF控件的句柄啊。