Биты библиотеки Freeimage к вектору - PullRequest
0 голосов
/ 10 июля 2019

Я пытаюсь обернуть голову, преобразовывая данные произвольного изображения в вектор.Мои данные об изображении выглядят следующим образом:

Image format : FIF_TIFF
Image Depth : 128
Image Color Type : FIC_RGBALPHA - 4
Image Type : FIT_RGBAF - 12
Image Width : 12
Image Height : 10

И тестовый код, который я пытаюсь запустить:

std::vector<float> imgProcessed;
// Calculate the number of bytes per pixel (3 for 24-bit or 4 for 32-bit)
float r, g, b, a = 0;
int bytespp = FreeImage_GetLine(fImage) / FreeImage_GetWidth(fImage);
for (unsigned y = 0; y < FreeImage_GetHeight(fImage); y++) {
    BYTE *bits = FreeImage_GetScanLine(fImage, y);
    for (unsigned x = 0; x < FreeImage_GetWidth(fImage); x++) {
        memcpy(&r, &bits[FI_RGBA_RED], sizeof(float));
        memcpy(&g, &bits[FI_RGBA_GREEN], sizeof(float));
        memcpy(&b, &bits[FI_RGBA_BLUE], sizeof(float));
        memcpy(&a, &bits[FI_RGBA_ALPHA], sizeof(float));
        imgProcessed.emplace_back(r);
        imgProcessed.emplace_back(g);
        imgProcessed.emplace_back(b);
        imgProcessed.emplace_back(a);
        bits += bytespp;
    }
}

Я получаю "некоторые значения", но они не соответствуют реальному изображению.Это всего лишь красный цвет, с половиной альфа-изображения белого / наполовину черного ... Результаты:

{ -8.68067e+28, -1.46673e-31, 0.223227, -8.83775e+21 }
{ -1.99299e-12, 1.4672e-31, 0.238394, -2.59991e+25 }

Я знаю, что emplace_back - плохой способ, и я должен использовать лучший подход,но я просто пытаюсь понять основы здесь.

...