int size = info.width * info.height * (info.bpp / 3) + pa * info.height;
Приведенный выше расчет размера неверен. Биты на пиксель должны быть разделены на 8. Индексация в циклах for также неверна. Это заканчивается умножением высоты на высоту.
Также SetPixel(... i, j ...)
следует изменить на SetPixel(... j, i ...)
, поскольку i
в вашем случае относится к оси Y.
Как упоминалось в предыдущем ответе, заполнение должно быть исправлено тоже.
Обратите внимание, что вы можете использовать LoadImage
и другие Windows функции GDI для открытия и рисования растровых изображений.
int size = (info.width * (info.bpp / 8) + pa) * info.height;
...
for(int i = info.height - 1; i >= 0; i--)
{
for(int j = 0; j < info.width; j++)
{
int index = i * (info.width) + j;
p[index].B = *(temp++);
p[index].G = *(temp++);
p[index].R = *(temp++);
}
temp += pa;
}
for(int i = 0; i < info.height; i++)
{
for(int j = 0; j < info.width; j++)
{
int index = i * (info.width) + j;
PIxel m = p[index];
SetPixel(hdc, j, i, RGB(m.R, m.G, m.B));
}
}