src/gui/image/qpnghandler.cpp
branchRCL_3
changeset 4 3b1da2848fc7
parent 3 41300fa6a67c
child 30 5dc02b23752f
--- a/src/gui/image/qpnghandler.cpp	Tue Feb 02 00:43:10 2010 +0200
+++ b/src/gui/image/qpnghandler.cpp	Fri Feb 19 23:40:16 2010 +0200
@@ -1,6 +1,6 @@
 /****************************************************************************
 **
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
 ** All rights reserved.
 ** Contact: Nokia Corporation (qt-info@nokia.com)
 **
@@ -67,6 +67,9 @@
 #  define Q_INTERNAL_WIN_NO_THROW
 #endif
 
+// avoid going through QImage::scanLine() which calls detach
+#define FAST_SCAN_LINE(data, bpl, y) (data + (y) * bpl)
+
 /*
   All PNG files load to the minimal QImage equivalent.
 
@@ -510,7 +513,7 @@
         && outImage->format() == QImage::Format_Indexed8) {
         int color_table_size = outImage->colorCount();
         for (int y=0; y<(int)height; ++y) {
-            uchar *p = outImage->scanLine(y);
+            uchar *p = FAST_SCAN_LINE(data, bpl, y);
             uchar *end = p + width;
             while (p < end) {
                 if (*p >= color_table_size)
@@ -852,7 +855,7 @@
     png_get_IHDR(png_ptr, info_ptr, &width, &height, &bit_depth, &color_type,
         0, 0, 0);
 
-    const uchar *data = image.bits();
+    const uchar *data = (static_cast<const QImage *>(&image))->bits();
     int bpl = image.bytesPerLine();
     row_pointers = new png_bytep[height];
     uint y;