summaryrefslogtreecommitdiffstats
path: root/src/gui/image/qimage.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/gui/image/qimage.h')
-rw-r--r--src/gui/image/qimage.h166
1 files changed, 72 insertions, 94 deletions
diff --git a/src/gui/image/qimage.h b/src/gui/image/qimage.h
index 2ce9d96e6a..cba50e5e4c 100644
--- a/src/gui/image/qimage.h
+++ b/src/gui/image/qimage.h
@@ -1,41 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtGui module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
#ifndef QIMAGE_H
#define QIMAGE_H
@@ -47,6 +11,7 @@
#include <QtGui/qpixelformat.h>
#include <QtGui/qtransform.h>
#include <QtCore/qbytearray.h>
+#include <QtCore/qbytearrayview.h>
#include <QtCore/qrect.h>
#include <QtCore/qstring.h>
#include <QtCore/qcontainerfwd.h>
@@ -104,6 +69,13 @@ public:
Format_RGBA64_Premultiplied,
Format_Grayscale16,
Format_BGR888,
+ Format_RGBX16FPx4,
+ Format_RGBA16FPx4,
+ Format_RGBA16FPx4_Premultiplied,
+ Format_RGBX32FPx4,
+ Format_RGBA32FPx4,
+ Format_RGBA32FPx4_Premultiplied,
+ Format_CMYK8888,
#ifndef Q_QDOC
NImageFormats
#endif
@@ -115,13 +87,8 @@ public:
QImage(int width, int height, Format format);
QImage(uchar *data, int width, int height, Format format, QImageCleanupFunction cleanupFunction = nullptr, void *cleanupInfo = nullptr);
QImage(const uchar *data, int width, int height, Format format, QImageCleanupFunction cleanupFunction = nullptr, void *cleanupInfo = nullptr);
-#if QT_VERSION >= QT_VERSION_CHECK(6,0,0)
QImage(uchar *data, int width, int height, qsizetype bytesPerLine, Format format, QImageCleanupFunction cleanupFunction = nullptr, void *cleanupInfo = nullptr);
QImage(const uchar *data, int width, int height, qsizetype bytesPerLine, Format format, QImageCleanupFunction cleanupFunction = nullptr, void *cleanupInfo = nullptr);
-#else
- QImage(uchar *data, int width, int height, int bytesPerLine, Format format, QImageCleanupFunction cleanupFunction = nullptr, void *cleanupInfo = nullptr);
- QImage(const uchar *data, int width, int height, int bytesPerLine, Format format, QImageCleanupFunction cleanupFunction = nullptr, void *cleanupInfo = nullptr);
-#endif
#ifndef QT_NO_IMAGEFORMAT_XPM
explicit QImage(const char * const xpm[]);
@@ -129,16 +96,15 @@ public:
explicit QImage(const QString &fileName, const char *format = nullptr);
QImage(const QImage &);
- inline QImage(QImage &&other) noexcept
- : QPaintDevice(), d(nullptr)
- { qSwap(d, other.d); }
+ QImage(QImage &&other) noexcept
+ : QPaintDevice(), d(std::exchange(other.d, nullptr))
+ {}
~QImage();
QImage &operator=(const QImage &);
- inline QImage &operator=(QImage &&other) noexcept
- { qSwap(d, other.d); return *this; }
- inline void swap(QImage &other) noexcept
- { qSwap(d, other.d); }
+ QT_MOVE_ASSIGNMENT_OPERATOR_IMPL_VIA_MOVE_AND_SWAP(QImage)
+ void swap(QImage &other) noexcept
+ { qt_ptr_swap(d, other.d); }
bool isNull() const;
@@ -150,28 +116,28 @@ public:
void detach();
bool isDetached() const;
- QImage copy(const QRect &rect = QRect()) const;
- inline QImage copy(int x, int y, int w, int h) const
- { return copy(QRect(x, y, w, h)); }
+ [[nodiscard]] QImage copy(const QRect &rect = QRect()) const;
+ [[nodiscard]] QImage copy(int x, int y, int w, int h) const
+ { return copy(QRect(x, y, w, h)); }
Format format() const;
- Q_REQUIRED_RESULT Q_ALWAYS_INLINE QImage convertToFormat(Format f, Qt::ImageConversionFlags flags = Qt::AutoColor) const &
+ [[nodiscard]] QImage convertToFormat(Format f, Qt::ImageConversionFlags flags = Qt::AutoColor) const &
{ return convertToFormat_helper(f, flags); }
- Q_REQUIRED_RESULT Q_ALWAYS_INLINE QImage convertToFormat(Format f, Qt::ImageConversionFlags flags = Qt::AutoColor) &&
+ [[nodiscard]] QImage convertToFormat(Format f, Qt::ImageConversionFlags flags = Qt::AutoColor) &&
{
if (convertToFormat_inplace(f, flags))
return std::move(*this);
else
return convertToFormat_helper(f, flags);
}
- Q_REQUIRED_RESULT QImage convertToFormat(Format f, const QList<QRgb> &colorTable,
- Qt::ImageConversionFlags flags = Qt::AutoColor) const;
- bool reinterpretAsFormat(Format f);
+ [[nodiscard]] QImage convertToFormat(Format f, const QList<QRgb> &colorTable,
+ Qt::ImageConversionFlags flags = Qt::AutoColor) const;
- Q_REQUIRED_RESULT QImage convertedTo(Format f, Qt::ImageConversionFlags flags = Qt::AutoColor) const &
+ bool reinterpretAsFormat(Format f);
+ [[nodiscard]] QImage convertedTo(Format f, Qt::ImageConversionFlags flags = Qt::AutoColor) const &
{ return convertToFormat(f, flags); }
- Q_REQUIRED_RESULT QImage convertedTo(Format f, Qt::ImageConversionFlags flags = Qt::AutoColor) &&
+ [[nodiscard]] QImage convertedTo(Format f, Qt::ImageConversionFlags flags = Qt::AutoColor) &&
{ return convertToFormat(f, flags); }
void convertTo(Format f, Qt::ImageConversionFlags flags = Qt::AutoColor);
@@ -225,6 +191,7 @@ public:
qreal devicePixelRatio() const;
void setDevicePixelRatio(qreal scaleFactor);
+ QSizeF deviceIndependentSize() const;
void fill(uint pixel);
void fill(const QColor &color);
@@ -233,54 +200,64 @@ public:
bool hasAlphaChannel() const;
void setAlphaChannel(const QImage &alphaChannel);
- QImage createAlphaMask(Qt::ImageConversionFlags flags = Qt::AutoColor) const;
+ [[nodiscard]] QImage createAlphaMask(Qt::ImageConversionFlags flags = Qt::AutoColor) const;
#ifndef QT_NO_IMAGE_HEURISTIC_MASK
- QImage createHeuristicMask(bool clipTight = true) const;
+ [[nodiscard]] QImage createHeuristicMask(bool clipTight = true) const;
#endif
- QImage createMaskFromColor(QRgb color, Qt::MaskMode mode = Qt::MaskInColor) const;
-
- inline QImage scaled(int w, int h, Qt::AspectRatioMode aspectMode = Qt::IgnoreAspectRatio,
- Qt::TransformationMode mode = Qt::FastTransformation) const
- { return scaled(QSize(w, h), aspectMode, mode); }
- QImage scaled(const QSize &s, Qt::AspectRatioMode aspectMode = Qt::IgnoreAspectRatio,
- Qt::TransformationMode mode = Qt::FastTransformation) const;
- QImage scaledToWidth(int w, Qt::TransformationMode mode = Qt::FastTransformation) const;
- QImage scaledToHeight(int h, Qt::TransformationMode mode = Qt::FastTransformation) const;
- QImage transformed(const QTransform &matrix, Qt::TransformationMode mode = Qt::FastTransformation) const;
+ [[nodiscard]] QImage createMaskFromColor(QRgb color, Qt::MaskMode mode = Qt::MaskInColor) const;
+
+ [[nodiscard]] QImage scaled(int w, int h, Qt::AspectRatioMode aspectMode = Qt::IgnoreAspectRatio,
+ Qt::TransformationMode mode = Qt::FastTransformation) const
+ { return scaled(QSize(w, h), aspectMode, mode); }
+ [[nodiscard]] QImage scaled(const QSize &s, Qt::AspectRatioMode aspectMode = Qt::IgnoreAspectRatio,
+ Qt::TransformationMode mode = Qt::FastTransformation) const;
+ [[nodiscard]] QImage scaledToWidth(int w, Qt::TransformationMode mode = Qt::FastTransformation) const;
+ [[nodiscard]] QImage scaledToHeight(int h, Qt::TransformationMode mode = Qt::FastTransformation) const;
+ [[nodiscard]] QImage transformed(const QTransform &matrix, Qt::TransformationMode mode = Qt::FastTransformation) const;
static QTransform trueMatrix(const QTransform &, int w, int h);
- Q_REQUIRED_RESULT QImage mirrored(bool horizontally = false, bool vertically = true) const &
- { return mirrored_helper(horizontally, vertically); }
- Q_REQUIRED_RESULT QImage mirrored(bool horizontally = false, bool vertically = true) &&
- { mirrored_inplace(horizontally, vertically); return std::move(*this); }
- Q_REQUIRED_RESULT QImage rgbSwapped() const &
- { return rgbSwapped_helper(); }
- Q_REQUIRED_RESULT QImage rgbSwapped() &&
- { rgbSwapped_inplace(); return std::move(*this); }
+
+ [[nodiscard]] QImage mirrored(bool horizontally = false, bool vertically = true) const &
+ { return mirrored_helper(horizontally, vertically); }
+ [[nodiscard]] QImage mirrored(bool horizontally = false, bool vertically = true) &&
+ { mirrored_inplace(horizontally, vertically); return std::move(*this); }
+ [[nodiscard]] QImage rgbSwapped() const &
+ { return rgbSwapped_helper(); }
+ [[nodiscard]] QImage rgbSwapped() &&
+ { rgbSwapped_inplace(); return std::move(*this); }
void mirror(bool horizontally = false, bool vertically = true)
- { mirrored_inplace(horizontally, vertically); }
+ { mirrored_inplace(horizontally, vertically); }
void rgbSwap()
- { rgbSwapped_inplace(); }
+ { rgbSwapped_inplace(); }
void invertPixels(InvertMode = InvertRgb);
QColorSpace colorSpace() const;
- QImage convertedToColorSpace(const QColorSpace &) const;
- void convertToColorSpace(const QColorSpace &);
- void setColorSpace(const QColorSpace &);
-
+ [[nodiscard]] QImage convertedToColorSpace(const QColorSpace &colorSpace) const;
+ [[nodiscard]] QImage convertedToColorSpace(const QColorSpace &colorSpace, QImage::Format format, Qt::ImageConversionFlags flags = Qt::AutoColor) const;
+ void convertToColorSpace(const QColorSpace &colorSpace);
+ void convertToColorSpace(const QColorSpace &colorSpace, QImage::Format format, Qt::ImageConversionFlags flags = Qt::AutoColor);
+ void setColorSpace(const QColorSpace &colorSpace);
+
+ QImage colorTransformed(const QColorTransform &transform) const &;
+ QImage colorTransformed(const QColorTransform &transform, QImage::Format format, Qt::ImageConversionFlags flags = Qt::AutoColor) const &;
+ QImage colorTransformed(const QColorTransform &transform) &&;
+ QImage colorTransformed(const QColorTransform &transform, QImage::Format format, Qt::ImageConversionFlags flags = Qt::AutoColor) &&;
void applyColorTransform(const QColorTransform &transform);
+ void applyColorTransform(const QColorTransform &transform, QImage::Format format, Qt::ImageConversionFlags flags = Qt::AutoColor);
- bool load(QIODevice *device, const char* format);
+ bool load(QIODevice *device, const char *format);
bool load(const QString &fileName, const char *format = nullptr);
- bool loadFromData(const uchar *buf, int len, const char *format = nullptr);
- inline bool loadFromData(const QByteArray &data, const char *aformat = nullptr)
- { return loadFromData(reinterpret_cast<const uchar *>(data.constData()), data.size(), aformat); }
+ bool loadFromData(QByteArrayView data, const char *format = nullptr);
+ bool loadFromData(const uchar *buf, int len, const char *format = nullptr); // ### Qt 7: qsizetype
+ bool loadFromData(const QByteArray &data, const char *format = nullptr) // ### Qt 7: drop
+ { return loadFromData(QByteArrayView(data), format); }
bool save(const QString &fileName, const char *format = nullptr, int quality = -1) const;
bool save(QIODevice *device, const char *format = nullptr, int quality = -1) const;
- static QImage fromData(const uchar *data, int size, const char *format = nullptr);
- inline static QImage fromData(const QByteArray &data, const char *format = nullptr)
- { return fromData(reinterpret_cast<const uchar *>(data.constData()), data.size(), format); }
+ static QImage fromData(QByteArrayView data, const char *format = nullptr);
+ static QImage fromData(const uchar *data, int size, const char *format = nullptr); // ### Qt 7: qsizetype
+ static QImage fromData(const QByteArray &data, const char *format = nullptr) // ### Qt 7: drop
+ { return fromData(QByteArrayView(data), format); }
qint64 cacheKey() const;
@@ -323,8 +300,9 @@ protected:
bool convertToFormat_inplace(Format format, Qt::ImageConversionFlags flags);
QImage smoothScaled(int w, int h) const;
+ void detachMetadata(bool invalidateCache = false);
+
private:
- friend class QWSOnScreenSurface;
QImageData *d;
friend class QRasterPlatformPixmap;