Как получить данные байтового массива из gdiplus:: bitmap ?
Всем привет.
Я хочу получить данные массива байтов (данные изображения) из Gdiplus::Bitmap.
Поэтому я набрал следующий код.
bool CMyImage::GetImagePointer(BYTE* pBuffer) { //Gdiplus::Bitmap* m_pBmp; defined. PixelFormat format; format = m_pBmp->GetPixelFormat(); int bpp = GetPixelFormatSize(format); int w = m_pBmp->GetWidth(); int h = m_pBmp->GetHeight(); int size = w*h*bpp/8; BitmapData data; Rect rect(0,0,w,h); m_pBmp->LockBits(&rect,ImageLockModeRead,format,&data); BYTE* pSrcPointer = (BYTE*)data.Scan0; BYTE* pDstPointer = pBuffer; int imageRowSize = w*bpp/8; for ( int i=0; i<h; i++ ) { memcpy( pDstPointer, pSrcPointer, imageRowSize ); pSrcPointer += w; pDstPointer += imageRowSize; } m_pBmp->UnlockBits(&data); return true; }
(Вопрос)
Но если размер ширины изображения (байтового массива)не кратен 4, растровое изображение не исправляет выравнивание.
В чем причина?
Пожалуйста, посоветуйте мне.
Спасибо.
Что я уже пробовал:
Если он изменяется следующим образом, выравнивание изображения будет правильным.
Но 1 строка в самом низу растрового изображения-это не данные.
bool CMyImage::GetImagePointer(BYTE* pBuffer) { //Gdiplus::Bitmap* m_pBmp; defined. PixelFormat format; format = m_pBmp->GetPixelFormat(); int bpp = GetPixelFormatSize(format); int w = m_pBmp->GetWidth(); int h = m_pBmp->GetHeight(); int size = w*h*bpp/8; BitmapData data; Rect rect(0,0,w,h); m_pBmp->LockBits(&rect,ImageLockModeRead,format,&data); memcpy(pBuffer, (BYTE*)data.Scan0, size); /* BYTE* pSrcPointer = (BYTE*)data.Scan0; BYTE* pDstPointer = pBuffer; int imageRowSize = w*bpp/8; for ( int i=0; i<h; i++ ) { memcpy( pDstPointer, pSrcPointer, imageRowSize ); pSrcPointer += w; pDstPointer += imageRowSize; } */ m_pBmp->UnlockBits(&data); return true; }