Загрузка значений цвета из массива пикселей - PullRequest
0 голосов
/ 21 февраля 2012

Я прочитал этот урок http://tipsandtricks.runicsoft.com/Cpp/BitmapTutorial.html о растровом изображении, и это действительно помогло .. Мне нужно прочитать целочисленные значения цвета из элементов массива пикселей. Как это сделать? Хорошо, вот код для помещения данных в массив rgb

BYTE* ConvertBMPToRGBBuffer ( BYTE* Buffer, int width, int height )
{

if ( ( NULL == Buffer ) || ( width == 0 ) || ( height == 0 ) )
    return NULL;

// find the number of padding bytes

int padding = 0;
int scanlinebytes = width * 3;
while ( ( scanlinebytes + padding ) % 4 != 0 )     // DWORD = 4 bytes
    padding++;
// get the padded scanline width
int psw = scanlinebytes + padding;

// create new buffer
BYTE* newbuf = new BYTE[width*height*3];

// now we loop trough all bytes of the original buffer, 
// swap the R and B bytes and the scanlines
long bufpos = 0;   
long newpos = 0;
for ( int y = 0; y < height; y++ )
    for ( int x = 0; x < 3 * width; x+=3 )
    {
        newpos = y * 3 * width + x;     
        bufpos = ( height - y - 1 ) * psw + x;

        newbuf[newpos] = Buffer[bufpos + 2];       
        newbuf[newpos + 1] = Buffer[bufpos+1]; 
        newbuf[newpos + 2] = Buffer[bufpos];     
    }

return newbuf;
    }

1 Ответ

2 голосов
/ 21 февраля 2012

Похоже, ваше изображение в формате RGB с чередованием.Чтобы получить пиксель в точке (x, y), просто индексируйте массив в этом месте.Было бы проще, если бы ваш буфер указывал на тип структуры.Что-то вроде:

typedef struct RGBPixel {
    BYTE red;
    BYTE green;
    BYTE blue;
} RGBPixel;

Тогда вы могли бы сделать что-то вроде этого:

RGBPixel* pixels = (RGBPixel*)newbuf;

Чтобы получить пиксель в точке (x, y), вы должны сделать это:1008 *

...