src/openvg/qpixmapdata_vg.cpp
changeset 37 758a864f9613
parent 33 3e2da88830cd
equal deleted inserted replaced
36:ef0373b55136 37:758a864f9613
    45 #if !defined(QT_NO_EGL)
    45 #if !defined(QT_NO_EGL)
    46 #include <QtGui/private/qegl_p.h>
    46 #include <QtGui/private/qegl_p.h>
    47 #endif
    47 #endif
    48 #include "qvg_p.h"
    48 #include "qvg_p.h"
    49 #include "qvgimagepool_p.h"
    49 #include "qvgimagepool_p.h"
       
    50 #include <QBuffer>
       
    51 #include <QImageReader>
       
    52 #include <QtGui/private/qimage_p.h>
    50 
    53 
    51 QT_BEGIN_NAMESPACE
    54 QT_BEGIN_NAMESPACE
    52 
    55 
    53 static int qt_vg_pixmap_serial = 0;
    56 static int qt_vg_pixmap_serial = 0;
    54 
    57 
   150 }
   153 }
   151 
   154 
   152 void QVGPixmapData::fromImage
   155 void QVGPixmapData::fromImage
   153         (const QImage &image, Qt::ImageConversionFlags flags)
   156         (const QImage &image, Qt::ImageConversionFlags flags)
   154 {
   157 {
       
   158     QImage img = image;
       
   159     createPixmapForImage(img, flags, false);
       
   160 }
       
   161 
       
   162 void QVGPixmapData::fromImageReader(QImageReader *imageReader,
       
   163                                  Qt::ImageConversionFlags flags)
       
   164 {
       
   165     QImage image = imageReader->read();
       
   166     if (image.isNull())
       
   167         return;
       
   168 
       
   169     createPixmapForImage(image, flags, true);
       
   170 }
       
   171 
       
   172 bool QVGPixmapData::fromFile(const QString &filename, const char *format,
       
   173                           Qt::ImageConversionFlags flags)
       
   174 {
       
   175     QImage image = QImageReader(filename, format).read();
       
   176     if (image.isNull())
       
   177         return false;
       
   178 
       
   179     createPixmapForImage(image, flags, true);
       
   180 
       
   181     return !isNull();
       
   182 }
       
   183 
       
   184 bool QVGPixmapData::fromData(const uchar *buffer, uint len, const char *format,
       
   185                       Qt::ImageConversionFlags flags)
       
   186 {
       
   187     QByteArray a = QByteArray::fromRawData(reinterpret_cast<const char *>(buffer), len);
       
   188     QBuffer b(&a);
       
   189     b.open(QIODevice::ReadOnly);
       
   190     QImage image = QImageReader(&b, format).read();
       
   191     if (image.isNull())
       
   192         return false;
       
   193 
       
   194     createPixmapForImage(image, flags, true);
       
   195 
       
   196     return !isNull();
       
   197 }
       
   198 
       
   199 void QVGPixmapData::createPixmapForImage(QImage &image, Qt::ImageConversionFlags flags, bool inPlace)
       
   200 {
   155     if (image.size() == QSize(w, h))
   201     if (image.size() == QSize(w, h))
   156         setSerialNumber(++qt_vg_pixmap_serial);
   202         setSerialNumber(++qt_vg_pixmap_serial);
   157     else
   203     else
   158         resize(image.width(), image.height());
   204         resize(image.width(), image.height());
   159     source = image.convertToFormat(sourceFormat(), flags);
   205 
       
   206     if (inPlace && image.data_ptr()->convertInPlace(sourceFormat(), flags))
       
   207         source = image;
       
   208     else
       
   209         source = image.convertToFormat(sourceFormat());
       
   210 
   160     recreate = true;
   211     recreate = true;
   161 }
   212 }
   162 
   213 
   163 void QVGPixmapData::fill(const QColor &color)
   214 void QVGPixmapData::fill(const QColor &color)
   164 {
   215 {