Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Merge branch 'jb49193' into 'mer-5.6'
[qtbase] Add more inplace image conversions between ARGB and RGBA formats. Contributes to JB#49193

See merge request mer-core/qtbase!54
  • Loading branch information
adenexter committed Mar 19, 2020
2 parents 2b1c9f3 + f0826c7 commit 4e478cd
Showing 1 changed file with 48 additions and 5 deletions.
53 changes: 48 additions & 5 deletions src/gui/image/qimage_conversions.cpp
Expand Up @@ -402,6 +402,49 @@ static bool convert_ARGB_to_ARGB_PM_inplace(QImageData *data,Qt::ImageConversion
}
#endif

static bool convert_ARGB_to_RGBA_PM_inplace(QImageData *data,Qt::ImageConversionFlags)
{
Q_ASSERT(data->format == QImage::Format_ARGB32);

const int pad = (data->bytes_per_line >> 2) - data->width;
QRgb *rgb_data = (QRgb *) data->data;

for (int i = 0; i < data->height; ++i) {
const QRgb *end = rgb_data + data->width;
while (rgb_data < end) {
*rgb_data = ARGB2RGBA(qPremultiply(*rgb_data));
++rgb_data;
}
rgb_data += pad;
}

data->format = QImage::Format_RGBA8888_Premultiplied;

return true;
}

static bool convert_RGBA_to_ARGB_PM_inplace(QImageData *data,Qt::ImageConversionFlags)
{
Q_ASSERT(data->format == QImage::Format_RGBA8888_Premultiplied);

const int pad = (data->bytes_per_line >> 2) - data->width;
QRgb *rgb_data = (QRgb *) data->data;

for (int i = 0; i < data->height; ++i) {
const QRgb *end = rgb_data + data->width;
while (rgb_data < end) {
*rgb_data = RGBA2ARGB(qPremultiply(*rgb_data));
++rgb_data;
}
rgb_data += pad;
}

data->format = QImage::Format_ARGB32;

return true;
}


static void convert_ARGB_to_RGBx(QImageData *dest, const QImageData *src, Qt::ImageConversionFlags)
{
Q_ASSERT(src->format == QImage::Format_ARGB32);
Expand Down Expand Up @@ -2597,9 +2640,9 @@ InPlace_Image_Converter qimage_inplace_converter_map[QImage::NImageFormats][QIma
0,
0,
0,
0,
0,
0,
convert_ARGB_to_RGBA_inplace<QImage::Format_RGBX8888>,
convert_ARGB_to_RGBA_inplace<QImage::Format_RGBA8888>,
convert_ARGB_to_RGBA_inplace<QImage::Format_RGBA8888_Premultiplied>,
convert_RGB_to_RGB30_inplace<PixelOrderBGR>,
0,
convert_RGB_to_RGB30_inplace<PixelOrderRGB>,
Expand Down Expand Up @@ -2629,7 +2672,7 @@ InPlace_Image_Converter qimage_inplace_converter_map[QImage::NImageFormats][QIma
0,
convert_ARGB_to_RGBA_inplace<QImage::Format_RGBX8888>,
convert_ARGB_to_RGBA_inplace<QImage::Format_RGBA8888>,
0,
convert_ARGB_to_RGBA_PM_inplace,
convert_RGB_to_RGB30_inplace<PixelOrderBGR>,
0,
convert_RGB_to_RGB30_inplace<PixelOrderRGB>,
Expand Down Expand Up @@ -2718,7 +2761,7 @@ InPlace_Image_Converter qimage_inplace_converter_map[QImage::NImageFormats][QIma
0,
convert_RGBA_to_ARGB_inplace<QImage::Format_RGB32>,
convert_RGBA_to_ARGB_inplace<QImage::Format_ARGB32>,
0,
convert_RGBA_to_ARGB_PM_inplace,
0,
0,
0,
Expand Down

0 comments on commit 4e478cd

Please sign in to comment.