如何在 Windows GDI 中旋转位图?

发布于 2024-08-21 20:31:45 字数 35 浏览 5 评论 0原文

我将如何在 Windows GDI、C++ 中旋转位图?

How would I go about rotating a Bitmap in Windows GDI,C++?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

谜兔 2024-08-28 20:31:45

您可以使用 GDI+ (#include) 来完成此操作。 Graphics 类具有 RotateTransform 方法。这允许任意旋转。使用 Image::RotateFlip() 如果您只需要旋转90度,效率就高很多。

You can do it with GDI+ (#include <gdiplus.h>). The Graphics class has the RotateTransform method. That allows arbitrary rotations. Use Image::RotateFlip() if you only need to rotate by 90 degree increments, that's a lot more efficient.

御弟哥哥 2024-08-28 20:31:45

听起来你必须使用 PlgBlt。将矩形的 4 个角作为 2D 点,旋转它们,然后调用 PlgBlt。

来自 MSDN 位图旋转

将位图复制到
平行四边形;使用 PlgBlt
函数,执行位块
从源中的矩形传输
设备上下文转换为平行四边形
目标设备上下文。到
旋转位图,应用程序必须
提供世界坐标
单位,用于角落
平行四边形。

Sounds like you have to use PlgBlt. Take your rectangle's 4 corners as 2D Points, rotate them, then call PlgBlt.

From MSDN Bitmap Rotation:

To copy a bitmap into
a parallelogram; use the PlgBlt
function, which performs a bit-block
transfer from a rectangle in a source
device context into a parallelogram in
a destination device context. To
rotate the bitmap, an application must
provide the coordinates, in world
units, to be used for the corners of
the parallelogram.

眸中客 2024-08-28 20:31:45

另一种可能性(除了已经建议的可能性之外)是使用SetWorldTransform()。不同之处在于它是模态的并且适用于整个 DC,而不仅仅是单个操作。如果您想旋转一张位图,但其他东西不旋转,那么它可能不是您的最佳选择。如果你想绘制一些旋转的东西,或者(特别是)如果你想旋转你绘制的所有东西(至少到一个DC中),它可以很好地工作。

Another possibility (beyond those already suggested) is to use SetWorldTransform(). This is different in that it is modal and applies to the DC as a whole, not just a single operation. If you want to rotate one bitmap rotated, but other things without rotation, it's probably not your best choice. If you want to draw a number of things rotated, or (especially) if you want to rotate everything you draw (at least into one DC) it can work quite nicely though.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文