2011-10-31 1 views
3

Qt 4.8rc1을 사용하면 png 파일로 변환하려는 QImage가 있습니다. 그것은 그것이 png 형식으로 변환 해야하는 것보다 오래 걸리는 것 같습니다 : ~ 70ms 800x800 빈 png에 대한. 이 방법을 더 효율적으로 만들 수있는 방법이 있습니까, 아니면 png/zlib에 의해 본질적으로 제한됩니까? QImage::save(const QString & fileName, const char * format = 0, int quality = -1)의 세 번째 인수 당신을 도울 수QImage를 사용하여 png를 저장하는 데 걸리는 시간을 줄이려면 어떻게해야합니까?

#include <QtGui> 
#include <QTimer> 


int 
main(int argc, char *argv[]) { 
    int times = 1000; 
    QString format("png"); 

    QByteArray ba; 
    QBuffer* buffer = new QBuffer(&ba); 
    buffer->open(QIODevice::WriteOnly); 

    QTime timer; 
    timer.start(); 

    while(times--) { 
    QImage image(800, 800, QImage::Format_RGB32); 
    image.save(buffer, format.toAscii(), -1); 
    } 

    int elapsed = timer.elapsed(); 

    qDebug() << "Completed 1000 runs in" << elapsed << "ms. (" << (elapsed/1000) << "ms/render)"; 
} 

답변

1

: 여기

내가 실행하고 벤치 마크입니다. 설명서에 다음 내용이 나와 있습니다.

품질 계수의 범위는 0-100 또는 -1이어야합니다. 작은 압축 파일을 얻으려면 0에서 , 큰 압축되지 않은 파일에서는 100, 기본 설정을 사용하려면 -1 (기본값)을 지정하십시오.

품질 값을 변경하면 zlib에서 이미지 데이터를 압축하는 데 걸리는 시간을 변경할 수 있습니다. 다양한 품질 값을 가진 QImage :: save()를 호출하고 실행 시간이 변경되는지 확인합니다. 모두 범위에 따라

// Compression levels. 
#define Z_NO_COMPRESSION   0 
#define Z_BEST_SPEED    1 
#define Z_BEST_COMPRESSION  9 
#define Z_DEFAULT_COMPRESSION (-1) 

시도 값 :

는 Qt는 문서 품질 must be in the range 0 to 100specify 0 to obtain small compressed files, 100 for large uncompressed files zlib manual 다른 범위를 보여주고 있다고하지만.

+1

감사합니다, 이것은 올바른 방향으로 나를 지적했습니다. 압축 수준이 일부 도움이되었지만 가장 큰 영향을 준 것은 PNG 필터를 없음으로 설정하는 것이 었습니다. ('png_set_filter (png_ptr, PNG_FILTER_TYPE_BASE, PNG_FILTER_NONE);') 불행히도 QImage를 통해 수정할 수 없으며 자체 QImageWriter를 만들어야하는 것처럼 보입니다. –

+0

당신을 진심으로 환영합니다. QPNGImageWriter ('https : // qt.gitorious.org/qt/qt/blobs/4.7/src/gui/image/qpnghandler.cpp # line695')는 png_set_filter()를 호출하지 않는 것 같습니다. PNG 필터가 없음을 의미하지 않습니까? – Bill

+0

문서에서 알아낼 수 없지만 명시 적으로 none으로 설정하면 내 테스트에서 훨씬 빠릅니다 (3-4x). 따라서 다른 필터 중 하나를 기본값으로 사용해야합니다. –

관련 문제