7#include "scanlineconverter_p.h"
10ScanLineConverter::ScanLineConverter(
const QImage::Format &targetFormat)
11 : _targetFormat(targetFormat)
15ScanLineConverter::ScanLineConverter(
const ScanLineConverter &other)
16 : _targetFormat(other._targetFormat)
17 , _colorSpace(other._colorSpace)
18 , _defaultColorSpace(other._defaultColorSpace)
22ScanLineConverter &ScanLineConverter::operator=(
const ScanLineConverter &other)
24 _targetFormat = other._targetFormat;
25 _colorSpace = other._colorSpace;
26 _defaultColorSpace = other._defaultColorSpace;
35void ScanLineConverter::setTargetColorSpace(
const QColorSpace &colorSpace)
37 _colorSpace = colorSpace;
40QColorSpace ScanLineConverter::targetColorSpace()
const
45void ScanLineConverter::setDefaultSourceColorSpace(
const QColorSpace &colorSpace)
47 _defaultColorSpace = colorSpace;
50QColorSpace ScanLineConverter::defaultSourceColorSpace()
const
52 return _defaultColorSpace;
55const uchar *ScanLineConverter::convertedScanLine(
const QImage &image, qint32 y)
57 auto colorSpaceConversion = isColorSpaceConversionNeeded(image);
58 if (image.
format() == _targetFormat && !colorSpaceConversion) {
61 if (image.
width() != _tmpBuffer.width() || image.
format() != _tmpBuffer.format()) {
65 if (_tmpBuffer.isNull()) {
69 auto tmp = _tmpBuffer;
70 if (colorSpaceConversion) {
73 cs = _defaultColorSpace;
75 if (tmp.depth() < 24) {
78 tmp.setColorSpace(cs);
79 tmp.convertToColorSpace(_colorSpace);
87 tmp.convertTo(_targetFormat);
90 if (_convBuffer.isNull()) {
93 return _convBuffer.constBits();
96qsizetype ScanLineConverter::bytesPerLine()
const
98 if (_convBuffer.isNull()) {
101 return _convBuffer.bytesPerLine();
104bool ScanLineConverter::isColorSpaceConversionNeeded(
const QImage &image,
const QColorSpace &targetColorSpace,
const QColorSpace &defaultColorSpace)
107 if (!sourceColorSpace.isValid()) {
108 sourceColorSpace = defaultColorSpace;
110 if (!sourceColorSpace.isValid() || !targetColorSpace.
isValid()) {
115 auto spr = sourceColorSpace.primaries();
119 if (stf == QColorSpace::TransferFunction::Custom ||
120 ttf == QColorSpace::TransferFunction::Custom ||
121 spr == QColorSpace::Primaries::Custom ||
122 tpr == QColorSpace::Primaries::Custom) {
126 if (stf == ttf && spr == tpr) {
bool isValid() const const
Primaries primaries() const const
TransferFunction transferFunction() const const
qsizetype bytesPerLine() const const
QColorSpace colorSpace() const const
QList< QRgb > colorTable() const const
const uchar * constScanLine(int i) const const