void QRasterPlatformPixmap::fill(const QColor &color) { uint pixel; if (image.depth() == 1) { int gray = qGray(color.rgba()); // Pick the best approximate color in the image's colortable. if (qAbs(qGray(image.color(0)) - gray) < qAbs(qGray(image.color(1)) - gray)) pixel = 0; else pixel = 1; } else if (image.depth() >= 15) { int alpha = color.alpha(); if (alpha != 255) { if (!image.hasAlphaChannel()) { QImage::Format toFormat; #if !(defined(__ARM_NEON__) || defined(__SSE2__)) if (image.format() == QImage::Format_RGB16) toFormat = QImage::Format_ARGB8565_Premultiplied; else if (image.format() == QImage::Format_RGB666) toFormat = QImage::Format_ARGB6666_Premultiplied; else if (image.format() == QImage::Format_RGB555) toFormat = QImage::Format_ARGB8555_Premultiplied; else if (image.format() == QImage::Format_RGB444) toFormat = QImage::Format_ARGB4444_Premultiplied; else #endif toFormat = QImage::Format_ARGB32_Premultiplied; if (!image.isNull() && qt_depthForFormat(image.format()) == qt_depthForFormat(toFormat)) { image.detach(); image.d->format = toFormat; } else { image = QImage(image.width(), image.height(), toFormat); } } } pixel = qPremultiply(color.rgba()); const QPixelLayout *layout = &qPixelLayouts[image.format()]; layout->convertFromARGB32PM(&pixel, &pixel, 1, layout, 0); } else { pixel = 0; // ### what about 8 bits } image.fill(pixel); }
void QRasterPlatformPixmap::fill(const QColor &color) { uint pixel; if (image.depth() == 1) { int gray = qGray(color.rgba()); // Pick the best approximate color in the image's colortable. if (qAbs(qGray(image.color(0)) - gray) < qAbs(qGray(image.color(1)) - gray)) pixel = 0; else pixel = 1; } else if (image.depth() >= 15) { int alpha = color.alpha(); if (alpha != 255) { if (!image.hasAlphaChannel()) { QImage::Format toFormat = qt_alphaVersionForPainting(image.format()); if (!image.isNull() && qt_depthForFormat(image.format()) == qt_depthForFormat(toFormat)) { image.detach(); image.d->format = toFormat; } else { image = QImage(image.width(), image.height(), toFormat); } } } pixel = qPremultiply(color.rgba()); const QPixelLayout *layout = &qPixelLayouts[image.format()]; layout->convertFromARGB32PM(&pixel, &pixel, 1, layout, 0); } else if (image.format() == QImage::Format_Alpha8) { pixel = qAlpha(color.rgba()); } else if (image.format() == QImage::Format_Grayscale8) { pixel = qGray(color.rgba()); } else { pixel = 0; // ### what about 8 bit indexed? } image.fill(pixel); }