| /* | |
| * Copyright 2020 Google LLC | |
| * | |
| * Use of this source code is governed by a BSD-style license that can be | |
| * found in the LICENSE file. | |
| */ | |
| #include "gm/gm.h" | |
| #include "include/core/SkBitmap.h" | |
| #include "include/core/SkCanvas.h" | |
| #include "include/core/SkColorSpace.h" | |
| #include "include/core/SkImage.h" | |
| // This GM should draw two yellow boxes; the bug drew one in cyan. | |
| DEF_SIMPLE_GM(skbug_9819, c, 256, 256) { | |
| auto info = SkImageInfo::Make(1,1, kUnknown_SkColorType, kPremul_SkAlphaType); | |
| SkBitmap rgba, | |
| bgra; | |
| rgba.allocPixels(info.makeColorType(kRGBA_8888_SkColorType)); | |
| bgra.allocPixels(info.makeColorType(kBGRA_8888_SkColorType)); | |
| SkColor yellow = 0xffffff00; | |
| rgba.eraseColor(yellow); | |
| bgra.eraseColor(yellow); | |
| c->save(); | |
| c->scale(128,128); | |
| c->drawImage(rgba.asImage(), 0,0); | |
| c->drawImage(bgra.asImage(), 0,1); | |
| c->restore(); | |
| auto grade = [&](int x, int y){ | |
| SkBitmap bm; | |
| bm.allocPixels(SkImageInfo::Make(1,1, | |
| kGray_8_SkColorType, | |
| kUnpremul_SkAlphaType, | |
| SkColorSpace::MakeSRGB())); | |
| if (!c->readPixels(bm, x,y)) { | |
| // Picture-backed canvases, that sort of thing. Just assume they're good. | |
| MarkGMGood(c, x+128, y); | |
| return; | |
| } | |
| // We test only luma so that grayscale destinations are also correctly graded: | |
| // - yellow (good) is around 237 | |
| // - cyan (bad) is around 202 | |
| uint8_t gray = *bm.getAddr8(0,0); | |
| (abs(gray - 237) > 2 ? MarkGMBad | |
| : MarkGMGood)(c, x+128,y); | |
| }; | |
| grade(64, 64); | |
| grade(64, 192); | |
| } |