0

我正在编写一些代码,它从连接的网络摄像头获取位图,将其顺时针旋转 90、180 或 270 度并将其显示在窗口中。

位图最初是作为与设备无关的位图提供的。允许我从源(位图)到目标(在屏幕上旋转)的最有效的调用系列(就复制内存而言)是什么?

我正在使用 C++ 和 Win32 API。

4

1 回答 1

0

您必须了解位图在内存中的表示方式,它是逐行的。您可以选择是否颠倒。因此,例如,您从左上角开始,然后在第一行获得所有像素 (x=0..cx, y=0),直到达到位图 (cx) 的宽度。然后你可能有一个步幅(一些填充字节),然后下一行像素(x=0..cx,y=1)开始。

请记住,转换是微不足道的:对于 90 度和 270 度,您需要单独复制每个像素。对于 180 度,您可以使用memcpy每一行“翻转”位图。您也可以使用BitBlt负高度。

使用通过CreateDIBSection或使用接收到的指针直接提供对位的访问GetDIBitsGdiFlush如果您已将这些位图绘制为内存 DC,请记住在使用这些位之前调用。

于 2012-08-12T14:11:37.737 回答