libextractor

GNU libextractor
Log | Files | Refs | Submodules | README | LICENSE

commit 3a88a4183f03ee06cde7da8f2b95c5fdaf5c99c0
parent 3547de13279c3b80d5555a24e60c633c54469d86
Author: Nils Durner <durner@gnunet.org>
Date:   Sat, 24 Jun 2006 23:51:18 +0000

support for different color depths

Diffstat:
Msrc/plugins/thumbnailextractorqt.cc | 51++++++++++++++++++++++++++++++++++++++++-----------
1 file changed, 40 insertions(+), 11 deletions(-)

diff --git a/src/plugins/thumbnailextractorqt.cc b/src/plugins/thumbnailextractorqt.cc @@ -100,8 +100,9 @@ static char * whitelist[] = { struct EXTRACTOR_Keywords * libextractor_thumbnailqt_extract(const char * filename, const unsigned char * data, size_t size, - struct EXTRACTOR_Keywords * prev) { - QPixmap img; + struct EXTRACTOR_Keywords * prev, + const char * options) { + QImage *img; QByteArray bytes; QBuffer buffer; unsigned long width; @@ -110,6 +111,7 @@ struct EXTRACTOR_Keywords * libextractor_thumbnailqt_extract(const char * filena const char * mime; int j; char * format; + QImage::Format colors; /* if the mime-type of the file is not whitelisted do not run the thumbnail extactor! */ @@ -126,7 +128,28 @@ struct EXTRACTOR_Keywords * libextractor_thumbnailqt_extract(const char * filena if (whitelist[j] == NULL) return prev; - + + /* Determine image format to use */ + if (options == NULL) + colors = QImage::Format_ARGB32; + else + switch(atoi(options)) + { + case 1: + colors = QImage::Format_Mono; + break; + case 8: + colors = QImage::Format_Indexed8; + break; + case 16: + case 24: + colors = QImage::Format_RGB32; + break; + default: + colors = QImage::Format_ARGB32; + break; + } + #ifdef HAVE_QT_SVG if (strcmp(mime, "image/svg+xml") == 0) { @@ -138,9 +161,9 @@ struct EXTRACTOR_Keywords * libextractor_thumbnailqt_extract(const char * filena return prev; size = svg.defaultSize(); - img = QPixmap(size); + img = new QImage(size, colors); - QPainter painter(&img); + QPainter painter(img); painter.setViewport(0, 0, size.width(), size.height()); painter.eraseRect(0, 0, size.width(), size.height()); @@ -148,11 +171,14 @@ struct EXTRACTOR_Keywords * libextractor_thumbnailqt_extract(const char * filena } else #endif + { /* Load image */ - img.loadFromData(data, size); - - height = img.height(); - width = img.width(); + img = new QImage(); + img->loadFromData(data, size); + } + + height = img->height(); + width = img->width(); format = (char *) malloc(64); snprintf(format, 64, @@ -176,10 +202,13 @@ struct EXTRACTOR_Keywords * libextractor_thumbnailqt_extract(const char * filena width = THUMBSIZE; } - img = img.scaled(width, height, Qt::KeepAspectRatio, Qt::SmoothTransformation); + QImage thumb = img->scaled(width, height, Qt::KeepAspectRatio, + Qt::SmoothTransformation).convertToFormat(colors); + delete img; + buffer.setBuffer(&bytes); buffer.open(QIODevice::WriteOnly); - img.save(&buffer, "PNG"); + thumb.save(&buffer, "PNG"); binary = EXTRACTOR_binaryEncode((const unsigned char*) bytes.data(),