我正在使用标准的Win32 API编写程序。当用户在我的程序中选择一张图片时,我想绘制位图,使其突出显示/选中。使用标准的Windows隐喻,这意味着绘制一个用系统高亮颜色抖动的位图版本(我不确定“dithered”是技术上正确的术语,但请参阅下面的示例)。我已经尝试了几种方法来实现BitBlt和类似的功能,但我似乎无法弄清楚我需要的确切步骤。如果有一个标准的Win32函数处理这个,我一直无法找到它。有谁知道我怎么能做到这一点?
未选中的图像应如下所示:
所选图像应如下所示:
答案 0 :(得分:2)
我无法弄清楚如何直接执行此操作(例如使用BitBlt和朋友),但图像列表对象将为您执行此操作:
HBITMAP hBitmapImage = ...; // cookie monster
HBITMAP hBitmapMask = ...; // all black
HIMAGELIST hImageList = ImageList_Create(width, height, ILC_COLOR32 | ILC_MASK, 1, 0);
ImageList_Add(hImageList, hBitmapImage, hBitmapMask);
ImageList_Draw(hImageList, 0, hDC, x, y, ILD_SELECTED);
结果(左侧原件,右侧选择):
答案 1 :(得分:2)
看起来像GDI AlphaBlend()应该做的工作;使用高亮颜色创建一个小的实体位图,使用AlphaBlend将其覆盖在原始位图上,使用BLENDFUNCTION.SourceConstantAlpha字段指定透明度。
答案 2 :(得分:0)
那么您希望如何突出显示它?它可能是图像周围的框架,在这种情况下,您只需要FrameRect
左右。或者您可能想要PatBlt
图片。或者使用示例代码检查本文以获取另一个想法:Glow and Shadow Effects using Windows GDI。
答案 3 :(得分:0)
您可能还想反转图像以使用其中一个反转操作显示选择。例如,要反转已经存在于HDC上的内容,请通过该区域的坐标进行反转:
BitBlt(HDc, XPos, YPos, Width, Height, NULL, 0, 0, DSTINVERT);