【问题标题】:getting a subimage of a CImage获取 CImage 的子图像
【发布时间】:2010-11-14 06:40:52
【问题描述】:

我最近开始学习如何在 Visual Studio 中使用 MFC。我的程序使用了许多 32x32 像素的小图像,为方便起见,它们被放在一个大的 .png 中。我已经想出了如何将大图像加载到 CImage 中并将其显示在 CClientDC 上,但是我找不到任何可以帮助我将图像拆分为较小的 32x32 图像的方法。

或者,我可以使用 DevIL 获取大图像的像素数据,但我找不到任何从像素数据构造 CImage 的东西。

由于我几天前才开始学习 MFC,因此我不太了解 API,而且我可能遗漏了一些明显的东西。谁能指出我正确的方向?

【问题讨论】:

    标签: c++ mfc


    【解决方案1】:

    您需要使用 CImage::Draw() 重载来指定源矩形。这样您就可以从原始图像中剪切想要绘制的图像。有两个候选,例如 Draw(HDC hDestDC, const RECT& rectDest, const RECT& rectSrc)。另一个是这个doc page上列出的第一个。

    【讨论】:

    • 啊,做到了。不知何故,我错过了超载。感谢您的帮助。
    【解决方案2】:

    如果您只是在 GUI 中使用多图标图像,通常您不想创建小图像。

    在绘制图标时,将其偏移量和大小传递给 bitblt 函数,而不是整个图像的尺寸。

    如果您确实想将子图像存储在位图中,请为目标位图创建一个内存 DC 并在其中绘制。

    【讨论】:

    • 您使用 CBitmap::FromHandle 从中获取位图
    猜你喜欢
    • 1970-01-01
    • 2017-04-29
    • 2011-11-08
    • 2017-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多