2014-03-07 159 views
2

我通過以下代碼將RGB圖像轉換爲EXR格式,使用openexr;在C++中將RGB轉換爲HDR圖像格式(EXR格式)

int w = 1024; 
int h = 768; 

Array2D<Rgba> p (h, w); 
QString fileName = "Penguins.jpg"; 
QImage Image = QImage(fileName); 


QRgb c; 

for (int y = 0; y < h; ++y) 
{ 
    for (int x = 0; x < w; ++x) 
    { 
     c = Image.pixel(x,y); 
     Rgba &p = px[y][x]; 
     p.r = qRed(c)/255.0; 
     p.g = qGreen(c)/255.0; 
     p.b = qBlue(c)/255.0; 
     p.a = 1; 
    } 
} 

我的問題是爲什麼轉換後的圖像有不同的顏色?您可以看到給定的圖像,以及下面轉換的圖像(在Adobe Photoshop中打開); Given Image .jpg Converted Image .exr

回答

1

大多數常見圖像格式(如JPEG)中包含的RGB值都是經過伽馬校正的。 OpenEXR中的RGB值是線性的。您需要對每個像素進行轉換以使其成爲線性。

適當的線性轉換將是sRGB formula。然而,對於一個快速測試你可以通過2.2的功率接近它:

p.r = pow(qRed(c)/255.0, 2.2); 
    p.g = pow(qGreen(c)/255.0, 2.2); 
    p.b = pow(qBlue(c)/255.0, 2.2); 
+0

謝謝您的回答,將轉換後的顏色在Adobe Photoshop似乎是正確的,但我不明白爲什麼與Mac預覽圖,顏色是不同的。 – csuo

+0

@csuo Mac用於使用1.8的不同伽瑪值,請參閱https://support.apple.com/kb/HT3712 –

相關問題