Windows   发布时间:2022-05-07  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了windows – ImageList上的透明度?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
编辑:我提供了赏金,因为我怀疑否则我会得到任何答案.

最近我一直在使用listviews,我决定为每个项目添加一个图标,指示它是输入还是输出.图标添加正常,但它们不透明:

可以看出,图标显然不透明.我正在做这样的事情加载图标:

hImageList = ImageList_Create(16,16,ILC_MASK | ILC_COLOR32,2,2);
  if (hImageList != NULL)
  {
    iIN  = ImageList_AdDicon(hImageList,LoaDicon(hInstance,MAKEINTresourcE(101)));
    IoUT = ImageList_AdDicon(hImageList,MAKEINTresourcE(102)));
  }

我已经尝试搞乱ImageList_Create&的标志了. LoaDicon / LoadImage,但没有运气,说实话,我已经没有想法了.

任何帮助将非常感激.

首先,ImageList_replaceIcon在将图标数据添加到图像列表时复制图标数据.因此HICON需要在之后发布.

接下来,图像列表是本机位图,而不是图标.而您创建图像列表的方式使得图标到位图的转换非常模糊. ILC_COLOR32意味着图像列表应该创建为32位dib部分,它通常包含通过嵌入式alpha通道的透明度信息.相反,ILC_MASK意味着内部位图是DDB位图,透明度信息存储为1bpp掩码位图.

解决问题的最快方法 – 带上两个图标:

>将它们合并为一个32位宽,16位高的位图资源.用面具颜色填充背景: – 紫色或其他东西.
>使用ILC_COLOR | ILC_MASK创建位图
>加载位图,确保不要使用LR_TRANSPARENT.
>使用ImageList_AddMasked添加位图,传入代表蒙版颜色的COLORREF.

或者,为了更好的视觉效果……

>将PNG数据导出为包含预乘Alpha通道数据的32×16 32bpp位图文件.
>使用ILC_COLOR32值创建图像列表.
>使用LR_CREATEDIBSECTION的LoadImage()将位图加载为32bpp dib部分.
>使用ImageList_Add()添加图像

(最后一个选项有点棘手,因为支持使用正确预乘的alpha通道写出32位bmp文件的工具数量相当低).

编辑添加以下代码示例.使用在开发环境中创建的4bpp位图,这非常有用: –

HWND hwndCtl = CreateWindowEx(0,WC_LISTVIEW,TEXT("ListView1"),WS_CHILD|WS_VISIBLE|WS_HSCROLL|WS_VSCROLL,cx,cy,hWnd,(HMENU)101,hModule,null);
HBITMAP hbm = (HBITMAp)LoadImage(hModule,MAKEINTresourcE(IDB_BITMAP1),IMAGE_BITMAP,0);
COLORREF crMask=RGB(255,255);
HIMAGELIST himl = ImageList_Create(16,ILC_COLOR|ILC_MASK,0);
ImageList_AddMasked(himl,hbm,crMask);
ListView_SetImageList(hwndCtl,himl,LVSIL_NORMAL);

大佬总结

以上是大佬教程为你收集整理的windows – ImageList上的透明度?全部内容,希望文章能够帮你解决windows – ImageList上的透明度?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: