Почему заблокированные биты возвращают -842150451 для всех значений пикселей?

0

Я пытаюсь получить бит в растровом изображении, но я продолжаю получать этот вывод (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;
}
  • 5
    Предполагая, что -842150451 является 32-разрядным целым числом, его представление в шестнадцатеричном виде равно 0xcdcdcdcd . Отладка Microsoft malloc использует это значение для маркировки неинициализированной кучи памяти. en.wikipedia.org/wiki/Magic_number_(programming)
Теги:
gdi

1 ответ

1
Лучший ответ

Вы используете его неправильно, он возвращает 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
   //...
}

Не не пропустить проверку на наличие ошибок.

  • 0
    Что вы имеете в виду, что он возвращает BitmapData? Разве вы не передаете в качестве указателя, чтобы он заполнял это?
  • 0
    О НВМ ... я вижу!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню