[Qt-interest] how to show large image fastly?

wanneng yangguosdxl at gmail.com
Fri Aug 20 09:00:40 CEST 2010


On 2010年08月20日 09:16, Jason H wrote:
> Since it's a square, it wastes exponential CPU to process pixels you don't need.
> When you scroll, determine  the new desired region, process only those pixels.
> (QPixmap::copy()) If you need to animate it, you can do low quality scaling then
> on the final pass do a high quality scale.
>
>
>
>
>
> ----- Original Message ----
> From: wanneng<yangguosdxl at gmail.com>
> To: Jason H<scorp1us at yahoo.com>
> Cc: qt-interest at trolltech.com
> Sent: Thu, August 19, 2010 9:07:41 PM
> Subject: Re: [Qt-interest] how to show large image fastly?
>
> On 2010年08月20日 02:05, Jason H wrote:
>    
>> PNGs are compressed, this is likely your problem.
>> Use another format (bmp) or decompress to a QPixMap before you need to show it
>> quickly.
>>
>> I actually wrote a thread to load PNGs and hand them off uncompressed to the
>> main thread. This greatly increased performance on my dual-core system.
>>
>>
>>
>>
>>
>> ----- Original Message ----
>> From: wanneng<yangguosdxl at gmail.com>
>> To: qt-interest at trolltech.com
>> Sent: Thu, August 19, 2010 4:53:32 AM
>> Subject: [Qt-interest] how to show large image fastly?
>>
>> My code like following, and the image is 125KB, format is png. it is
>> slow when show the picture. and more bad is that I may be use the larger
>> picture, it may be 1MB. So does anyone know how to show large image
>> fastly? thank you.
>>
>> Map::Map(QWidget* parent) : QWidget(parent)
>> {
>>        isShow = true;
>>
>>        worldMap = new QPixmap(":/images/map.png", "png");
>>        qreal factor = this->width()/worldMap->width();
>>        qDebug("worldMap.width, height: %d, %d", worldMap->width(),
>> worldMap->height());
>>
>>        //scene = new QGraphicsScene(0, 0, worldMap->width(),
>> worldMap->height());
>>        scene = new QGraphicsScene(0, 0, 400, 300);
>>        scene->setBackgroundBrush(QColor(255, 255, 238));
>>
>>        /* add map to scene */
>>        mapItem = scene->addPixmap(*worldMap);
>>        qDebug()<<   "mapItem boundingRect"<<   mapItem->boundingRect();
>>        mapItem->setFlags(QGraphicsItem::ItemIsMovable);
>>        //mapItem->setTransformationMode(Qt::FastTransformation);
>>        //mapItem->setCacheMode(QGraphicsItem::ItemCoordinateCache);
>>        // this cache mode make drag the picture fast
>>        mapItem->setCacheMode(QGraphicsItem::DeviceCoordinateCache);
>>
>>        /* add station node to scene */
>>        drawStationNode();
>>
>>        view = new MapView(this);
>>        view->setScene(scene);
>>
>>        // let the view fit the widget automatically
>>        QVBoxLayout* vLayout = new QVBoxLayout;
>>        vLayout->addWidget(view);
>>        setLayout(vLayout);
>>
>>        createActions();
>>
>>        //slotFitWidget();
>>        updateAct();
>> }
>>
>> _______________________________________________
>> Qt-interest mailing list
>> Qt-interest at trolltech.com
>> http://lists.trolltech.com/mailman/listinfo/qt-interest
>>
>>
>>
>>
>>
>>
>>      
> Sorry, I didn't say it clear. When I load the picture, its spead is ok
> for me, but when I zoom in or zoom out or move it in the view, it is slow.
>
>    
So, I get your mean. You tell me just let cpu to process the region that 
is  exposed. But I'm a newbie for programming with qt. so could you give 
me a more detail explaining or a demonstration. Thank you.

-- 
--------------------------
万能
普赛科技




More information about the Qt-interest-old mailing list