summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoerg Bornemann <joerg.bornemann@theqtcompany.com>2015-12-17 13:17:03 +0100
committerJoerg Bornemann <joerg.bornemann@theqtcompany.com>2015-12-17 13:51:22 +0000
commit1cf9175e06db9c8c0388e21279b15b011fb593c2 (patch)
tree7f96113b0b57505f5d40e2b6cec3a5780c710216
parentc58ebfda3cead93b716eaf185e4a11130cb34dea (diff)
Extend toQImage to automatically deduce the image format
We will use this in a subsequent commit. Change-Id: I73af6b28691eea97e076d0619f3068ec8c5324a2 Done-by: Allan Reviewed-by: Allan Sandfeld Jensen <allan.jensen@theqtcompany.com>
-rw-r--r--src/core/type_conversion.cpp75
-rw-r--r--src/core/type_conversion.h2
2 files changed, 77 insertions, 0 deletions
diff --git a/src/core/type_conversion.cpp b/src/core/type_conversion.cpp
index 64cc41689..d4b988552 100644
--- a/src/core/type_conversion.cpp
+++ b/src/core/type_conversion.cpp
@@ -41,6 +41,81 @@
namespace QtWebEngineCore {
+QImage toQImage(const SkBitmap &bitmap)
+{
+ QImage image;
+ switch (bitmap.colorType()) {
+ case kUnknown_SkColorType:
+ break;
+ case kAlpha_8_SkColorType:
+ image = toQImage(bitmap, QImage::Format_Alpha8);
+ break;
+ case kRGB_565_SkColorType:
+ image = toQImage(bitmap, QImage::Format_RGB16);
+ break;
+ case kARGB_4444_SkColorType:
+ switch (bitmap.alphaType()) {
+ case kUnknown_SkAlphaType:
+ break;
+ case kUnpremul_SkAlphaType:
+ // not supported - treat as opaque
+ case kOpaque_SkAlphaType:
+ image = toQImage(bitmap, QImage::Format_RGB444);
+ break;
+ case kPremul_SkAlphaType:
+ image = toQImage(bitmap, QImage::Format_ARGB4444_Premultiplied);
+ break;
+ }
+ break;
+ case kRGBA_8888_SkColorType:
+ switch (bitmap.alphaType()) {
+ case kUnknown_SkAlphaType:
+ break;
+ case kOpaque_SkAlphaType:
+ image = toQImage(bitmap, QImage::Format_RGBX8888);
+ break;
+ case kPremul_SkAlphaType:
+ image = toQImage(bitmap, QImage::Format_RGBA8888_Premultiplied);
+ break;
+ case kUnpremul_SkAlphaType:
+ image = toQImage(bitmap, QImage::Format_RGBA8888);
+ break;
+ }
+ break;
+ case kBGRA_8888_SkColorType:
+ // we are assuming little-endian arch here.
+ switch (bitmap.alphaType()) {
+ case kUnknown_SkAlphaType:
+ break;
+ case kOpaque_SkAlphaType:
+ image = toQImage(bitmap, QImage::Format_RGB32);
+ break;
+ case kPremul_SkAlphaType:
+ image = toQImage(bitmap, QImage::Format_ARGB32_Premultiplied);
+ break;
+ case kUnpremul_SkAlphaType:
+ image = toQImage(bitmap, QImage::Format_ARGB32);
+ break;
+ }
+ break;
+ case kIndex_8_SkColorType: {
+ image = toQImage(bitmap, QImage::Format_Indexed8);
+ SkColorTable *skTable = bitmap.getColorTable();
+ if (skTable) {
+ QVector<QRgb> qTable(skTable->count());
+ for (int i = 0; i < skTable->count(); ++i)
+ qTable[i] = (*skTable)[i];
+ image.setColorTable(qTable);
+ }
+ break;
+ }
+ case kGray_8_SkColorType:
+ image = toQImage(bitmap, QImage::Format_Grayscale8);
+ break;
+ }
+ return image;
+}
+
int flagsFromModifiers(Qt::KeyboardModifiers modifiers)
{
int modifierFlags = ui::EF_NONE;
diff --git a/src/core/type_conversion.h b/src/core/type_conversion.h
index cfab4d19a..da0ee3e5c 100644
--- a/src/core/type_conversion.h
+++ b/src/core/type_conversion.h
@@ -149,6 +149,8 @@ inline QImage toQImage(const SkBitmap &bitmap, QImage::Format format)
return QImage((uchar *)pixelRef->pixels(), bitmap.width(), bitmap.height(), format);
}
+QImage toQImage(const SkBitmap &bitmap);
+
inline QMatrix4x4 toQt(const SkMatrix44 &m)
{
QMatrix4x4 qtMatrix(