diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2018-10-23 17:29:19 +0200 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2018-11-08 07:15:03 +0000 |
commit | 7db70f1e85f628f78df84eb195473fb315e812fe (patch) | |
tree | cafdfd0b01e9d2e3acb82f84858d1f8984227a3a /src/core/type_conversion.cpp | |
parent | 0ef5bbc16781fc0d0ea72e396b1d6e23cd588dc9 (diff) |
Implement CopyFromSurface
Means we can get screenshots in devtools.
Change-Id: I7b50d6ac5a54d236573bcf5f58ae872bd50dccad
Reviewed-by: Jüri Valdmann <juri.valdmann@qt.io>
Diffstat (limited to 'src/core/type_conversion.cpp')
-rw-r--r-- | src/core/type_conversion.cpp | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/src/core/type_conversion.cpp b/src/core/type_conversion.cpp index 4aff2cff6..d35426ac3 100644 --- a/src/core/type_conversion.cpp +++ b/src/core/type_conversion.cpp @@ -137,6 +137,44 @@ QImage toQImage(const gfx::ImageSkiaRep &imageSkiaRep) return image; } +SkBitmap toSkBitmap(const QImage &image) +{ + SkBitmap bitmap; + SkImageInfo imageInfo; + + switch (image.format()) { + case QImage::Format_RGB32: + imageInfo = SkImageInfo::Make(image.width(), image.height(), kBGRA_8888_SkColorType, kOpaque_SkAlphaType); + break; + case QImage::Format_ARGB32: + imageInfo = SkImageInfo::Make(image.width(), image.height(), kBGRA_8888_SkColorType, kUnpremul_SkAlphaType); + break; + case QImage::Format_ARGB32_Premultiplied: + imageInfo = SkImageInfo::Make(image.width(), image.height(), kBGRA_8888_SkColorType, kPremul_SkAlphaType); + break; + case QImage::Format_RGBX8888: + imageInfo = SkImageInfo::Make(image.width(), image.height(), kRGBA_8888_SkColorType, kOpaque_SkAlphaType); + break; + case QImage::Format_RGBA8888: + imageInfo = SkImageInfo::Make(image.width(), image.height(), kRGBA_8888_SkColorType, kUnpremul_SkAlphaType); + break; + case QImage::Format_RGBA8888_Premultiplied: + imageInfo = SkImageInfo::Make(image.width(), image.height(), kRGBA_8888_SkColorType, kPremul_SkAlphaType); + break; + default: + return toSkBitmap(image.convertToFormat(QImage::Format_ARGB32_Premultiplied)); + } + + bitmap.installPixels(imageInfo, (void *)image.bits(), image.bytesPerLine()); + + // Ensure we copy the pixels + SkBitmap bitmapCopy; + bitmapCopy.allocPixels(imageInfo); + bitmapCopy.writePixels(bitmap.pixmap()); + + return bitmapCopy; +} + QIcon toQIcon(const std::vector<SkBitmap> &bitmaps) { if (!bitmaps.size()) |