gpt4 book ai didi

c++ - OpenEXR 到 QImage 的转换

转载 作者:行者123 更新时间:2023-11-28 04:20:13 24 4
gpt4 key购买 nike

GetPixels() 来自使用 FreeImage 库(96 位:3 x 32 位 IEEE 浮点)加载的 EXR 图像。这个想法是将像素数据转换为 QImage::Format_RGB888。

编辑:我使用了 Barcelona Rooftops

这是我到目前为止所得到的:

uint l_h = m_ZImage->GetHeight();
uint l_w = m_ZImage->GetWidth();
float *l_data = (float*)m_ZImage->GetPixels();
m_QImage = QImage(l_w, l_h, QImage::Format_RGB888);
uchar *l_pixels = m_QImage.bits();

for (uint i = 0; i < l_h; ++i)
{
for (uint j = 0; j < l_w; ++j)
{
uint l_id = (i * l_w) + j;
l_pixels[l_id] = uchar(l_data[l_id] * 255); l_id++;
l_pixels[l_id] = uchar(l_data[l_id] * 255); l_id++;
l_pixels[l_id] = uchar(l_data[l_id] * 255);
}
}

虽然图像的顶部三分之一是正确的,但底部的 2/3 是黑色的。我一定是遗漏了一些非常明显的东西,但我很难弄明白!

最佳答案

天哪,我忘了考虑 channel 数。这是简化版本:

uint l_h = m_ZImage->GetHeight();
uint l_w = m_ZImage->GetWidth();
uint l_count = l_w * l_h * m_ZImage->GetChannelCount();
float *l_data = reinterpret_cast<float*>(m_ZImage->GetPixels());
m_QImage = QImage(l_w, l_h, QImage::Format_RGB888);
uchar *l_pixels = m_QImage.bits();

for (uint i = 0; i < l_count; ++i)
{
l_pixels[i] = ZMath::ClampToByte(l_data[i] * 255); /// Edit
}

另一方面,白色是不正确的,因为有超出图表的彩虹效果。堆积在原来的问题上。是否有将图像数据从 32 位转换为 8 位的约定?

关于c++ - OpenEXR 到 QImage 的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55623617/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com