From ba61af9bc1e5f12df10fe1a2bed7b7b1d39801b4 Mon Sep 17 00:00:00 2001 From: Mike Reed Date: Thu, 16 Nov 2017 10:01:16 -0500 Subject: test scalePixels and unpremul Bug: skia:5733 Change-Id: I6c661408198f6a536e1e55ba01d976948446b8eb Reviewed-on: https://skia-review.googlesource.com/70280 Commit-Queue: Mike Reed Reviewed-by: Brian Osman Reviewed-by: Mike Klein --- gm/image.cpp | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) (limited to 'gm/image.cpp') 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); + } +} -- cgit v1.2.3