Version: (using KDE KDE 3.1.1a) Installed from: SuSE RPMs OS: Linux An example can be found here: http://www.christian-seiler.de/temp/gamma.html The left picture looks differently in Konqueror and Mozilla. Stefan
Confirmed for CVS HEAD.
This appears to be a Qt bug. I've sent a bug report (with a suggested fix) to qt-bugs. Will wait for a response before closing.
Created attachment 7269 [details] Patch, as proposed to TT
CVS commit by bhards: This patch fixes a bug report that was logged against KDE for not handling gamma correctly (http://bugs.kde.org/show_bug.cgi?id=61829). Using the example/showimg/showimg example in qt-3.3, the two test case images (linked in the original bug report) look the same. That isn't the case with a non-Qt based application, such as Mozilla. The gamma-yes.png file should look a lot lighter in the blue section. The problem is in src/kernel/qpngio.cpp::setup_qt() if ( screen_gamma != 0.0 && png_get_valid(png_ptr, info_ptr,PNG_INFO_gAMA) ) { double file_gamma; png_get_gAMA(png_ptr, info_ptr, &file_gamma); png_set_gamma( png_ptr, screen_gamma, file_gamma ); } which is wrong, because file gamma needs to be handled whether or not there is a non-default screen gamma value. qt-bugs@TT issue : N55198 CCMAIL: 61829-done@bugs.kde.org A 0053-png-gamma-fix.diff 1.1 M +1 -1 README 1.28 --- qt-copy/patches/README #1.27:1.28 @@ -1,4 +1,4 @@ Please assign the numbers incrementally, and don't reuse them. The next one: -#0053 +#0054 This directory contains patches for Qt that haven't been accepted by TrollTech
SVN commit 476941 by charles: Fix gamma correction semi-properly. The patch that does it incorrectly in qt-copy should go away now. This has seen minimal review on kfm-devel... CCMAIL:61829@bugs.kde.org M +11 -2 loader.cpp --- branches/KDE/3.5/kdelibs/khtml/misc/loader.cpp #476940:476941 @@ -821,7 +821,16 @@ #ifdef CACHE_DEBUG kdDebug(6060) << "CachedImage::data(): reloading as pixmap:" << endl; #endif - p = new QPixmap( _buffer.buffer() ); + p = new QPixmap; + { + QBuffer buffer(_buffer.buffer()); + buffer.open(IO_ReadOnly); + QImageIO io( &buffer, 0 ); + io.setGamma(2.2); // hardcoded "reasonable value" + bool result = io.read(); + if (result) p->convertFromImage(io.image(), 0); + } + // set size of image. #ifdef CACHE_DEBUG kdDebug(6060) << "CachedImage::data(): image is null: " << p->isNull() << endl; @@ -836,7 +845,7 @@ for (QPtrDictIterator<CachedObjectClient> it( m_clients ); it.current();) it()->notifyFinished( this ); - m_status = Cached; //all done + m_status = Cached; //all done } } }
I can see how that might work around the problem for khtml, but what about the direct users of kimgio? Also, can you tell me what you think is wrong with the qt-copy patch? Brad