Konwersja obrazu opencv na bitmapę gdi nie działa zależnie od rozmiaru obrazu
Mam ten kod, który konwertuje obraz opencv na bitmapę:
void processimage(MAT imageData)
{
Gdiplus::Bitmap bitmap(imageData.cols,imageData.rows,stride, PixelFormat24bppRGB,imageData.data);
// do some work with bitmap
}
Działa dobrze, gdy rozmiar obrazu wynosi 2748 X 3664. Ale próbuję przetworzyć obraz z rozmiarem 1374 X 1832, nie działa.
Błąd jest nieprawidłowym parametrem (2).
Sprawdziłem i mogę potwierdzić, że:
w 2748 * 3664:
cols = 2748wiersze = 3664krok = 8244obraz jest kontynuowany.w 1374 X 1832
cols = 1374wiersze = 1832krok = 4122obraz jest kontynuowany.Wszystko wydaje mi się poprawne, ale generuje błąd.
Jaki jest problem i jak mogę to naprawić?
EdytowaćNa podstawie odpowiedzi wyjaśniającej, dlaczego nie mogę utworzyć mapy bitowej. W końcu zaimplementowałem to w ten sposób:
Mat newImage;
cvtColor(imageData, newImage, CV_BGR2BGRA);
Gdiplus::Bitmap bitmap(newImage.cols,newImage.rows,newImage.step1(), PixelFormat32bppRGB,newImage.data);
Tak skutecznie konwertuję obraz wejściowy na 4 bajty na piksel, a następnie używam go do konwersji na bitmapę.
Wszystkie kredyty doRoger Rowland za jego odpowiedź.