Я пытаюсь получить бит в растровом изображении, но я продолжаю получать этот вывод (PS. Я также тестировал весь массив):
-842150451 // Array before lockbits
-842150451 // Array after lockbits
Это мой код, чтобы получить заблокированные биты.
BitmapData * getLockedBitmapData()
{
float squareSideLength = 50 * 4;
Bitmap * src = new Bitmap(squareSideLength , squareSideLength);
Graphics * graphics = Graphics::FromImage(solid);
SolidBrush blackBrush(Color(255, 0, 0, 0));
graphics->FillRectangle(&blackBrush, FLOAT_ZERO, FLOAT_ZERO, squareSideLength, squareSideLength);
int srcWidth = src->GetWidth();
int srcHeight = src->GetHeight();
UINT * pixels = new UINT[srcWidth * srcHeight];
// _RPT1(0, "%d\n", pixels[55]);
BitmapData * bitmapData = new BitmapData();
bitmapData->Width = srcWidth;
bitmapData->Height = srcHeight;
bitmapData->Stride = 4 * srcWidth;
bitmapData->PixelFormat = PixelFormat32bppARGB;
bitmapData->Scan0 = (VOID*) pixels;
bitmapData->Reserved = NULL;
src->LockBits(new Rect(0, 0, srcWidth, srcHeight),
ImageLockMode::ImageLockModeRead | ImageLockMode::ImageLockModeWrite,
src->GetPixelFormat(),
bitmapData);
// _RPT1(0, "%d\n", pixels[55]);
return bitmapData;
}
Вы используете его неправильно, он возвращает BitmapData. Поэтому это должно быть:
BitmapData bitmapData;
Status ret = src->LockBits(new Rect(0, 0, srcWidth, srcHeight),
ImageLockMode::ImageLockModeRead | ImageLockMode::ImageLockModeWrite,
src->GetPixelFormat(),
&bitmapData);
if (ret != Ok) {
// Report error
//...
}
Не не пропустить проверку на наличие ошибок.
-842150451
является 32-разрядным целым числом, его представление в шестнадцатеричном виде равно0xcdcdcdcd
. Отладка Microsoftmalloc
использует это значение для маркировки неинициализированной кучи памяти. en.wikipedia.org/wiki/Magic_number_(programming)