Я пытаюсь обернуть голову, преобразовывая данные произвольного изображения в вектор.Мои данные об изображении выглядят следующим образом:
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 - плохой способ, и я должен использовать лучший подход,но я просто пытаюсь понять основы здесь.