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 { |