Windows 如何'break up' .msstyles 文件中的图片?



我说的是这个=>

流位图

我很好奇,Windows是如何使用该文件上的各个位图的?Windows是否有某种裁剪工具可以在每次使用时将它们分解?我似乎找不到任何信息。

通常的做法是加载更大的位图,然后在绘制时使用其中的一部分(有时称为图集(。我对.msstyles并不特别熟悉,但假设您拥有确定每个元素在位图中的位置所需的元数据,则可以使用GDI函数(如BitBltStretchBltAlphaBlend(仅绘制该部分。

这些函数将需要blit的源位图区域作为参数,而不是对整个位图进行操作。例如,AlphaBlend的签名如下所示:

BOOL AlphaBlend(
HDC           hdcDest,
int           xoriginDest,
int           yoriginDest,
int           wDest,
int           hDest,
HDC           hdcSrc,
int           xoriginSrc,
int           yoriginSrc,
int           wSrc,
int           hSrc,
BLENDFUNCTION ftn
);

如果我们要在皮肤位图中绘制一个位于x=100,y=200的16x16图标,我们可以如下所示:

AlphaBlend(hdcDest, xoriginDest, yoriginDest, 16, 16, skinDc, 100, 200, 16, 16, blend);

请注意,实际的Windows主题化实现可能不是这样做的,而是将图像分割成更小的块,以减少内存消耗。

相关内容

  • 没有找到相关文章

最新更新