【问题标题】:How does Windows 'break up' the pictures from the .msstyles files? [closed]Windows 如何“分解” .msstyles 文件中的图片? [关闭]
【发布时间】:2021-01-15 11:52:19
【问题描述】:

我说的是这个=>

Stream bitmaps

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

【问题讨论】:

标签: windows themes


【解决方案1】:

通常的做法是加载更大的位图,然后在绘制时使用其中的一部分(有时称为atlas)。我不熟悉.msstyles,但假设您有必要的元数据来确定每个元素在位图中的位置,您可以使用 GDI 函数(如BitBltStretchBltAlphaBlend.

这些函数将它们需要blit的源位图区域作为参数,而不是对整个位图进行操作。例如,signature for 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 主题实现可能不会这样做,而是将图像分割成更小的块以减少内存消耗,例如。

【讨论】:

  • 谢谢。我更喜欢 C#,但这很好。我也用 C/C++ 开发。
猜你喜欢
  • 2010-09-22
  • 2022-12-01
  • 1970-01-01
  • 2014-03-16
  • 1970-01-01
  • 1970-01-01
  • 2013-06-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多