GDI + Bitmap LockBits возвращает повернутое изображение? - PullRequest
1 голос
/ 24 февраля 2011

Я загрузил изображение из файла и хочу записать его в файл 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(). После загрузки изображение идет сверху вниз.

...