Я понял, что скорее всего проблема либо на стадии создания массива Pixels, то есть я как-то неправильно обращаюсь к элементам динамического массива, либо на стадии передачи массива в функцию CreateBitmap. Ей нужен указатель void*, возможно дело в этом. Как передать значение правильно? (сейчас функция рисует пару строчек пикселей случайного цвета).
Функции set_pixel, get_pixel bitmap_image()
это библиотека, которая находится тут: https://gist.github.com/kelbon/eedb4c093abf5c1d00a7cd332ae250f1
void DrawingBitmap(HDC kuda, unsigned int whereX, unsigned int whereY, const std::string &NameFile, unsigned int width, unsigned int height)
{
bitmap_image input(width, height);
input = bitmap_image(NameFile);
rgb_t perenos;
unsigned int i, j;
//выделение памяти под массив указателей на строки
COLORREF** Pixels = new COLORREF * [height];
// выделение памяти под пиксели в строках
for (i = 0; i < height; i++)
{
Pixels[i] = new COLORREF[width];
}
//работа с массивом данных
for (i = 0; i < height; i++)
{
for (j = 0; j < width; j++)
{
perenos = input.get_pixel(j, i);
Pixels[i][j] = RGB(perenos.red, perenos.green, perenos.blue);
}
}
//создал по взятому по номеру окну участок памяти, совместимый с устройством на который указывает hdcConsole
HDC memDC = CreateCompatibleDC(kuda);
HBITMAP memBM = CreateBitmap(width, height, 1, 32, Pixels);
(HBITMAP)SelectObject(memDC, memBM);
// Для контекста памяти устанавливаем тот же режим отображения, что используется в контексте отображения
SetMapMode(memDC, GetMapMode(kuda));
//рисую изображение
BitBlt(kuda, whereX, whereY, width, height, memDC, 0, 0, SRCCOPY);
// Восстанавливаем контекст памяти
SelectObject(memDC, memBM);
// Удаляем контекст памяти
DeleteDC(memDC);
// освобождение памяти в строках
for (i=0;i<height;i++)
{
delete[] Pixels[i];
}
//освобождение памяти от массива указателей на строки
delete[] Pixels;
}
CreateBitmap нужно передавать не массив строк, а сразу массив пикселей, размером width*height. По строкам надо только обеспечить выравнивание (Each scan line in the rectangle must be word aligned (scan lines that are not word aligned must be padded with zeros)). Скорее всего, выравнивание и так есть, можно подстраховаться:
assert( sizeof(COLORREF)*width % sizeof(WORD) == 0 );
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
В одномерном массиве, состоящем из п целых элементов, вычислить: 1Номер максимального элемента массива; 2
Как сделать так, чтобы камера не флипалась (поворачивалась) вместе с персонажем, но перемещалась за с ним?