aboutsummaryrefslogtreecommitdiffhomepage
path: root/gm/image.cpp
diff options
context:
space:
mode:
authorGravatar Mike Reed <reed@google.com>2017-11-16 10:01:16 -0500
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-11-16 17:34:54 +0000
commitba61af9bc1e5f12df10fe1a2bed7b7b1d39801b4 (patch)
tree9eab2876e683df2093cd0b57f674be041e401d97 /gm/image.cpp
parent5f1c8ff5249729f140bd4be2400b5a0b54478462 (diff)
test scalePixels and unpremul
Bug: skia:5733 Change-Id: I6c661408198f6a536e1e55ba01d976948446b8eb Reviewed-on: https://skia-review.googlesource.com/70280 Commit-Queue: Mike Reed <reed@google.com> Reviewed-by: Brian Osman <brianosman@google.com> Reviewed-by: Mike Klein <mtklein@chromium.org>
Diffstat (limited to 'gm/image.cpp')
-rw-r--r--gm/image.cpp36
1 files changed, 36 insertions, 0 deletions
diff --git a/gm/image.cpp b/gm/image.cpp
index 6bf9f01154..576d7e8f98 100644
--- a/gm/image.cpp
+++ b/gm/image.cpp
@@ -381,3 +381,39 @@ DEF_SIMPLE_GM(new_texture_image, canvas, 280, 60) {
canvas->translate(kSize + kPad, 0);
}
}
+
+static void draw_pixmap(SkCanvas* canvas, const SkPixmap& pm, SkScalar x, SkScalar y) {
+ canvas->drawImage(SkImage::MakeRasterCopy(pm), x, y, nullptr);
+}
+
+static void slam_ff(const SkPixmap& pm) {
+ for (int y = 0; y < pm.height(); ++y) {
+ for (int x = 0; x < pm.width(); ++x) {
+ *pm.writable_addr32(x, y) = *pm.addr32(x, y) | SkPackARGB32(0xFF, 0, 0, 0);
+ }
+ }
+}
+
+DEF_SIMPLE_GM(scalepixels_unpremul, canvas, 1080, 280) {
+ SkImageInfo info = SkImageInfo::MakeN32(16, 16, kUnpremul_SkAlphaType);
+ SkAutoPixmapStorage pm;
+ pm.alloc(info);
+ for (int y = 0; y < 16; ++y) {
+ for (int x = 0; x < 16; ++x) {
+ *pm.writable_addr32(x, y) = SkPackARGB32NoCheck(0, (y << 4) | y, (x << 4) | x, 0xFF);
+ }
+ }
+ SkAutoPixmapStorage pm2;
+ pm2.alloc(SkImageInfo::MakeN32(256, 256, kUnpremul_SkAlphaType));
+
+ const SkFilterQuality qualities[] = {
+ kNone_SkFilterQuality, kLow_SkFilterQuality, kMedium_SkFilterQuality, kHigh_SkFilterQuality
+ };
+
+ for (auto fq : qualities) {
+ pm.scalePixels(pm2, fq);
+ slam_ff(pm2);
+ draw_pixmap(canvas, pm2, 10, 10);
+ canvas->translate(pm2.width() + 10.0f, 0);
+ }
+}