GDI+位图 LockBits 返回旋转图像?

发布于 2024-10-18 15:05:50 字数 623 浏览 3 评论 0原文

我从文件加载图像并希望将其写入 AVI 文件:

Gdiplus::Bitmap frame(L"test.png", FALSE);
Gdiplus::BitmapData bmp_data = {};
Gdiplus::Rect rect(0, 0, frame.GetWidth(), frame.GetHeight());
frame.LockBits(&rect, Gdiplus::ImageLockModeRead, frame.GetPixelFormat(), 
    &bmp_data);
AVIStreamWrite(avi_stream, i, 1, bmp_data.Scan0, 
    std::abs(bmp_data.Stride) * bmp_data.Height, AVIIF_KEYFRAME, NULL, NULL);
frame.UnlockBits(&bmp_data);

生成的 avi 文件旋转 180 度。怎么了?

我还注意到原始图像是自下而上的(Bitmap::LockBits() 返回负值 BitmapData::Stride)。我通过 Bitmap::Save() 将其保存到磁盘。加载后图像是自上而下的。

I loaded an image from file and want to write it to AVI file:

Gdiplus::Bitmap frame(L"test.png", FALSE);
Gdiplus::BitmapData bmp_data = {};
Gdiplus::Rect rect(0, 0, frame.GetWidth(), frame.GetHeight());
frame.LockBits(&rect, Gdiplus::ImageLockModeRead, frame.GetPixelFormat(), 
    &bmp_data);
AVIStreamWrite(avi_stream, i, 1, bmp_data.Scan0, 
    std::abs(bmp_data.Stride) * bmp_data.Height, AVIIF_KEYFRAME, NULL, NULL);
frame.UnlockBits(&bmp_data);

Resulting avi-file is rotated by 180 degrees. What's wrong?

Also I noticed that original image was bottom-up (Bitmap::LockBits() returned negative BitmapData::Stride). I saved it to disk by Bitmap::Save(). After loading the image is top-down.

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

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

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文