RValue ref version of QPixmap::fromImage()
When converting from a temporary image we can use inplace conversion since we don't have to worry about changes made to the original. This should give a speedup in several places where QPixmaps are made from the return values of methods returning QImages. Change-Id: I1835bcf3fc061c4dbbb3d0507ec84178dc49b29b Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
This commit is contained in:
parent
c2e2e0151e
commit
d5d6e0cf99
@ -1616,6 +1616,28 @@ QPixmap QPixmap::fromImage(const QImage &image, Qt::ImageConversionFlags flags)
|
||||
return QPixmap(data.take());
|
||||
}
|
||||
|
||||
/*!
|
||||
\fn QPixmap QPixmap::fromImage(QImage &&image, Qt::ImageConversionFlags flags)
|
||||
\since 5.3
|
||||
\overload
|
||||
|
||||
Converts the given \a image to a pixmap without copying if possible.
|
||||
*/
|
||||
|
||||
|
||||
/*!
|
||||
\internal
|
||||
*/
|
||||
QPixmap QPixmap::fromImageInPlace(QImage &image, Qt::ImageConversionFlags flags)
|
||||
{
|
||||
if (image.isNull())
|
||||
return QPixmap();
|
||||
|
||||
QScopedPointer<QPlatformPixmap> data(QGuiApplicationPrivate::platformIntegration()->createPlatformPixmap(QPlatformPixmap::PixmapType));
|
||||
data->fromImageInPlace(image, flags);
|
||||
return QPixmap(data.take());
|
||||
}
|
||||
|
||||
/*!
|
||||
\fn QPixmap QPixmap::fromImageReader(QImageReader *imageReader, Qt::ImageConversionFlags flags)
|
||||
|
||||
|
@ -131,6 +131,12 @@ public:
|
||||
QImage toImage() const;
|
||||
static QPixmap fromImage(const QImage &image, Qt::ImageConversionFlags flags = Qt::AutoColor);
|
||||
static QPixmap fromImageReader(QImageReader *imageReader, Qt::ImageConversionFlags flags = Qt::AutoColor);
|
||||
#ifdef Q_COMPILER_RVALUE_REFS
|
||||
static QPixmap fromImage(QImage &&image, Qt::ImageConversionFlags flags = Qt::AutoColor)
|
||||
{
|
||||
return fromImageInPlace(image, flags);
|
||||
}
|
||||
#endif
|
||||
|
||||
bool load(const QString& fileName, const char *format = 0, Qt::ImageConversionFlags flags = Qt::AutoColor);
|
||||
bool loadFromData(const uchar *buf, uint len, const char* format = 0, Qt::ImageConversionFlags flags = Qt::AutoColor);
|
||||
@ -167,6 +173,7 @@ public:
|
||||
|
||||
protected:
|
||||
int metric(PaintDeviceMetric) const;
|
||||
static QPixmap fromImageInPlace(QImage &image, Qt::ImageConversionFlags flags = Qt::AutoColor);
|
||||
|
||||
private:
|
||||
QExplicitlySharedDataPointer<QPlatformPixmap> data;
|
||||
|
@ -135,11 +135,16 @@ bool QRasterPlatformPixmap::fromData(const uchar *buffer, uint len, const char *
|
||||
void QRasterPlatformPixmap::fromImage(const QImage &sourceImage,
|
||||
Qt::ImageConversionFlags flags)
|
||||
{
|
||||
Q_UNUSED(flags);
|
||||
QImage image = sourceImage;
|
||||
createPixmapForImage(image, flags, /* inplace = */false);
|
||||
}
|
||||
|
||||
void QRasterPlatformPixmap::fromImageInPlace(QImage &sourceImage,
|
||||
Qt::ImageConversionFlags flags)
|
||||
{
|
||||
createPixmapForImage(sourceImage, flags, /* inplace = */true);
|
||||
}
|
||||
|
||||
void QRasterPlatformPixmap::fromImageReader(QImageReader *imageReader,
|
||||
Qt::ImageConversionFlags flags)
|
||||
{
|
||||
|
@ -69,6 +69,7 @@ public:
|
||||
void resize(int width, int height);
|
||||
bool fromData(const uchar *buffer, uint len, const char *format, Qt::ImageConversionFlags flags);
|
||||
void fromImage(const QImage &image, Qt::ImageConversionFlags flags);
|
||||
void fromImageInPlace(QImage &image, Qt::ImageConversionFlags flags);
|
||||
void fromImageReader(QImageReader *imageReader, Qt::ImageConversionFlags flags);
|
||||
|
||||
void copy(const QPlatformPixmap *data, const QRect &rect);
|
||||
|
@ -79,6 +79,12 @@ public:
|
||||
virtual void resize(int width, int height) = 0;
|
||||
virtual void fromImage(const QImage &image,
|
||||
Qt::ImageConversionFlags flags) = 0;
|
||||
virtual void fromImageInPlace(QImage &image,
|
||||
Qt::ImageConversionFlags flags)
|
||||
{
|
||||
fromImage(image, flags);
|
||||
}
|
||||
|
||||
virtual void fromImageReader(QImageReader *imageReader,
|
||||
Qt::ImageConversionFlags flags);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user