Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
qrgbafloat.h
Go to the documentation of this file.
1// Copyright (C) 2021 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
4#ifndef QRGBAFLOAT_H
5#define QRGBAFLOAT_H
6
7#include <QtGui/qtguiglobal.h>
8#include <QtCore/qfloat16.h>
9
10#include <algorithm>
11#include <cmath>
12#include <type_traits>
13
14QT_BEGIN_NAMESPACE
15
16template<typename F>
17class alignas(sizeof(F) * 4) QRgbaFloat
18{
19 static_assert(std::is_same<F, qfloat16>::value || std::is_same<F, float>::value);
20public:
21 using Type = F;
22#if defined(__AVX512FP16__) && QFLOAT16_IS_NATIVE
23 // AVX512FP16 has multiplication instructions
24 using FastType = F;
25#else
26 // use FP32 for multiplications
27 using FastType = float;
28#endif
29 F r;
30 F g;
31 F b;
32 F a;
33
34 static constexpr
35 QRgbaFloat fromRgba64(quint16 red, quint16 green, quint16 blue, quint16 alpha)
36 {
37 constexpr FastType scale = FastType(1.0f / 65535.0f);
38 return QRgbaFloat{
39 F(red * scale),
40 F(green * scale),
41 F(blue * scale),
42 F(alpha * scale) };
43 }
44
45 static constexpr
46 QRgbaFloat fromRgba(quint8 red, quint8 green, quint8 blue, quint8 alpha)
47 {
48 constexpr FastType scale = FastType(1.0f / 255.0f);
49 return QRgbaFloat{
50 F(red * scale),
51 F(green * scale),
52 F(blue * scale),
53 F(alpha * scale) };
54 }
55 static constexpr
56 QRgbaFloat fromArgb32(uint rgb)
57 {
58 return fromRgba(quint8(rgb >> 16), quint8(rgb >> 8), quint8(rgb), quint8(rgb >> 24));
59 }
60
61 constexpr bool isOpaque() const { return a >= FastType(1.0f); }
62 constexpr bool isTransparent() const { return a <= FastType(0.0f); }
63
64 constexpr float red() const { return r; }
65 constexpr float green() const { return g; }
66 constexpr float blue() const { return b; }
67 constexpr float alpha() const { return a; }
68 void setRed(float _red) { r = F(_red); }
69 void setGreen(float _green) { g = F(_green); }
70 void setBlue(float _blue) { b = F(_blue); }
71 void setAlpha(float _alpha) { a = F(_alpha); }
72
73 constexpr float redNormalized() const { return clamp01(r); }
74 constexpr float greenNormalized() const { return clamp01(g); }
75 constexpr float blueNormalized() const { return clamp01(b); }
76 constexpr float alphaNormalized() const { return clamp01(a); }
77
78 constexpr quint8 red8() const { return qRound(redNormalized() * FastType(255.0f)); }
79 constexpr quint8 green8() const { return qRound(greenNormalized() * FastType(255.0f)); }
80 constexpr quint8 blue8() const { return qRound(blueNormalized() * FastType(255.0f)); }
81 constexpr quint8 alpha8() const { return qRound(alphaNormalized() * FastType(255.0f)); }
82 constexpr uint toArgb32() const
83 {
84 return uint((alpha8() << 24) | (red8() << 16) | (green8() << 8) | blue8());
85 }
86
87 constexpr quint16 red16() const { return qRound(redNormalized() * FastType(65535.0f)); }
88 constexpr quint16 green16() const { return qRound(greenNormalized() * FastType(65535.0f)); }
89 constexpr quint16 blue16() const { return qRound(blueNormalized() * FastType(65535.0f)); }
90 constexpr quint16 alpha16() const { return qRound(alphaNormalized() * FastType(65535.0f)); }
91
92 constexpr Q_ALWAYS_INLINE QRgbaFloat premultiplied() const
93 {
94 return QRgbaFloat{r * a, g * a, b * a, a};
95 }
96 constexpr Q_ALWAYS_INLINE QRgbaFloat unpremultiplied() const
97 {
98 if (a <= F{0.0f})
99 return QRgbaFloat{}; // default-initialization: zeroes
100 if (a >= F{1.0f})
101 return *this;
102 const FastType ia = FastType(1.0f) / FastType(a);
103 return QRgbaFloat{F(r * ia), F(g * ia), F(b * ia), F(a)};
104 }
105 constexpr bool operator==(QRgbaFloat f) const
106 {
107 return r == f.r && g == f.g && b == f.b && a == f.a;
108 }
109 constexpr bool operator!=(QRgbaFloat f) const
110 {
111 return !(*this == f);
112 }
113
114private:
115 constexpr static FastType clamp01(Type f)
116 {
117 return std::clamp(FastType(f), FastType(0.0f), FastType(1.0f));
118 }
119};
120
121typedef QRgbaFloat<qfloat16> QRgbaFloat16;
122typedef QRgbaFloat<float> QRgbaFloat32;
123
124QT_END_NAMESPACE
125
126#endif // QRGBAFLOAT_H
The QColorTransform class is a transformation between color spaces.
QColorTransform(QColorTransform &&colorTransform)=default
friend bool operator!=(const QColorTransform &ct1, const QColorTransform &ct2)
QColorTransform & operator=(const QColorTransform &other) noexcept
QColorTransform() noexcept=default
Q_GUI_EXPORT ~QColorTransform()
friend bool operator==(const QColorTransform &ct1, const QColorTransform &ct2)
\inmodule QtCore\reentrant
Definition qdatastream.h:49
QString errorString() const
Returns a human readable description of the last error that occurred.
void setDevice(QIODevice *device)
Sets QImageReader's device to device.
int quality() const
Returns the quality setting of the image format.
QString fileName() const
If the currently assigned device is a QFile, or if setFileName() has been called, this function retur...
QImageIOHandler::Transformations transformation() const
QIODevice * device() const
Returns the device currently assigned to QImageReader, or \nullptr if no device has been assigned.
QByteArray subType() const
bool supportsOption(QImageIOHandler::ImageOption option) const
Returns true if the reader supports option; otherwise returns false.
QList< QByteArray > supportedSubTypes() const
QByteArray format() const
Returns the format QImageReader uses for reading images.
void setQuality(int quality)
Sets the quality setting of the image format to quality.
ImageReaderError error() const
Returns the type of error that occurred last.
The QImageWriter class provides a format independent interface for writing images to files or other d...
QImageWriter(const QString &fileName, const QByteArray &format=QByteArray())
Constructs a QImageWriter objects that will write to a file with the name fileName,...
QImageWriter()
Constructs an empty QImageWriter object.
void setCompression(int compression)
This is an image format specific function that set the compression of an image.
bool write(const QImage &image)
Writes the image image to the assigned device or file name.
bool canWrite() const
Returns true if QImageWriter can write the image; i.e., the image format is supported and the assigne...
void setTransformation(QImageIOHandler::Transformations orientation)
QImageWriter(QIODevice *device, const QByteArray &format)
Constructs a QImageWriter object using the device device and image format format.
static QList< QByteArray > supportedMimeTypes()
Returns the list of MIME types supported by QImageWriter.
void setSubType(const QByteArray &type)
void setFileName(const QString &fileName)
Sets the file name of QImageWriter to fileName.
bool optimizedWrite() const
bool progressiveScanWrite() const
static QList< QByteArray > imageFormatsForMimeType(const QByteArray &mimeType)
void setOptimizedWrite(bool optimize)
static QList< QByteArray > supportedImageFormats()
Returns the list of image formats supported by QImageWriter.
int compression() const
Returns the compression of the image.
void setFormat(const QByteArray &format)
Sets the format QImageWriter will use when writing images, to format.
void setProgressiveScanWrite(bool progressive)
void setText(const QString &key, const QString &text)
Sets the image text associated with the key key to text.
Definition qmap.h:189
The QTransform class specifies 2D transformations of a coordinate system.
Definition qtransform.h:20
\keyword 16-bit Floating Point Support\inmodule QtCore \inheaderfile QFloat16
Definition qfloat16.h:48
Combined button and popup list for selecting options.
QRgbaFloat< float > QRgbaFloat32
QRgbaFloat< qfloat16 > QRgbaFloat16
Q_TRACE_METADATA(qtcore, "ENUM { AUTO, RANGE User ... MaxUser } QEvent::Type;")
Q_CORE_EXPORT QDebug operator<<(QDebug debug, QDir::Filters filters)
Definition qdir.cpp:2462
#define IWX_MSB(b)
Definition qimage.cpp:4386
static QImage rotated90(const QImage &src)
Definition qimage.cpp:4737
static void copyMetadata(QImage *dst, const QImage &src)
Definition qimage.cpp:1177
static void copyMetadata(QImageData *dst, const QImageData *src)
Definition qimage.cpp:1168
static int next_qimage_serial_number()
Definition qimage.cpp:85
#define QIMAGE_SANITYCHECK_MEMORY(image)
Definition qimage.cpp:63
static void copyPhysicalMetadata(QImageData *dst, const QImageData *src)
Definition qimage.cpp:1161
#define IWX_LSB(b)
Definition qimage.cpp:4395
static QImage rotated270(const QImage &src)
Definition qimage.cpp:4781
QMap< QString, QString > qt_getImageText(const QImage &image, const QString &description)
Definition qimage.cpp:6491
Q_GUI_EXPORT void qt_imageTransform(QImage &src, QImageIOHandler::Transformations orient)
Definition qimage.cpp:6478
#define PIX(x, y)
static QImage rotated180(const QImage &src)
Definition qimage.cpp:4763
static Qt::Orientations toOrientations(QImageIOHandler::Transformations orient)
Definition qimage.cpp:6468
QMap< QString, QString > qt_getImageTextFromDescription(const QString &description)
Definition qimage.cpp:6502
QTransform operator*(const QTransform &a, qreal n)
Definition qtransform.h:348
Q_DECLARE_TYPEINFO(QTransform, Q_RELOCATABLE_TYPE)
QTransform operator/(const QTransform &a, qreal n)
Definition qtransform.h:350
QPoint operator*(const QPoint &p, const QTransform &m)
Definition qtransform.h:333
QTransform operator+(const QTransform &a, qreal n)
Definition qtransform.h:352
QTransform operator-(const QTransform &a, qreal n)
Definition qtransform.h:354
QT_WARNING_POP bool qFuzzyCompare(const QTransform &t1, const QTransform &t2) noexcept
Definition qtransform.h:307