Freeimage库位向量

时间:2019-07-10 05:54:28

标签: freeimage

我正在努力把自由图像数据转换为向量。我的图像数据如下:

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;
    }
}

我得到“某些值”,但它们与实际图像不匹配。这只是红色,图像alpha的一半是白色/半黑色。...结果是:

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

我知道emplace_back是一个不好的方法,应该使用更好的方法,但是我只是想在这里理解基本知识。

0 个答案:

没有答案