Ваш вопрос неясен, так как вы не указали формат пикселей
Так что же такое пиксельный формат 8/15/16/24/32
bpp? какой заказ rgab / bgra?
почему const char
?
это не изменится с позицией !!! а также как Какой-то программист чувак предложил *a
скопировать только первый BYTE
, поэтому остальные каналы унифицированы, следовательно вывод мусора.
данные изображения char
?
это нормально, но тогда арифметика указателя будет 8-битной, а не 32-битной !!!
for(x...)
петля имеет i
внутри, что, скорее всего, является тиопо
почему float
каналы?
, что только приводит к проблемам с кастингом ...
Так что, если я соберу все вместе, ваш код не будет работать вообще, как ожидалось. Чтобы исправить это и предположить, что остальная часть кода (визуализация) в порядке, а формат пикселя - 32bpp, я бы изменил ваш код следующим образом:
typedef unsigned char BYTE;
typedef unsigned __int32 DWORD;
static std::unique_ptr<unsigned char [ ]> ImageData;
const int _r=0; // here change the RGB/BGR order
const int _g=1;
const int _b=2;
const int _a=3;
if ( !ImageData)
{
ImageData = std::make_unique<unsigned char [ ]>( Width* Height*4);
int x,y,a;
BYTE db[4];
DWORD *dd=(DWORD*)(void*)db;
DWORD *p=reinterpret_cast<DWORD*>(ImageData.get());
for (a=0,y=0;y<Height;y++)
for ( x=0;x<Width;x++,a++)
{
// some cool math to determine color based on x,y.
db[_r]=x;
db[_g]=y;
db[_b]=x+y;
db[_a]=128;
// copy pixel
p[a]=*dd;
}
}
Надеюсь, я сделал указатель в порядке, так как я не использую std::unique_ptr
. Кроме того, я кодировал его непосредственно в редакторе SO / SE, поэтому могут быть скрытые незначительные синтаксические ошибки или ошибки.