HICON 转ImageSource

C++通过SHGetFileInfo拿到的图标是HICON类型。
WPF要显示只能用Image控件,设置Source源,需要HICON转ImageSource

//IntPtr pIconData 通过HICON强转
private ImageSource IconDataToImageSource(IntPtr pIconData)
{
        ImageSource imageSoure = null;
        System.Drawing.Icon icon = System.Drawing.Icon.FromHandle(pIconData);
        //拿到的是大图标
        Int32Rect rect = new Int32Rect(0, 0, 32, 32);
        imageSoure = Imaging.CreateBitmapSourceFromHIcon(pIconData, rect, BitmapSizeOptions.FromEmptyOptions());
        return imageSoure;
}
在C++中,HICON通常是一个图标句柄,它是Windows API的一部分,用于表示图标资源。如果你想将HICON换为PNG格式的图片文件,你需要通过几个步骤: 1. **获取图标内容**:首先,你需要从HICON获取图标的数据,这通常涉及到调用`::ExtractIconEx()`函数。 ```cpp HBITMAP hBitmap = ::ExtractIconEx(hIcon, 0, NULL); ``` 2. **创建设备上下文**:为了能够保存图像,你需要创建一个内存DC(Device Context),例如: ```cpp HDC hdcMemory = CreateCompatibleDC(NULL); ``` 3. **复制到内存DC**:将HBITMAP的内容复制到内存DC上,然后可以创建位图信息结构(BITMAPINFO)来存储宽度、高度和颜色信息。 4. **创建位图文件**:使用`CreateDIBSection()`函数创建一个新的位图,并将其数据填充为PNG格式。 ```cpp BITMAPINFO bmi; ... HBITMAP hDIBSection = CreateDIBSection(hdcMemory, &bmi, DIB_RGB_COLORS, (void**)&dibSectionData, NULL, 0); ``` 5. **保存为PNG**:最后,你可以使用第三方库如libpng或PNG writer将DIBSection数据保存为PNG文件。这个过程可能会比较复杂,因为需要处理位深度换和编码等细节。 6. **清理资源**:完成后别忘了释放所有分配的资源,包括HBITMAP、HDC、HICON以及位图数据。 由于涉及的操作相对复杂,并且涉及到跨平台的图像处理,如果条件允许,推荐使用现成的库或者API(如DirectWrite、GDI+或第三方图形库)来简化这个过程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值