2020-01-28 19:12:50 +00:00
|
|
|
/*
|
|
|
|
* Copyright 2020 Google Inc.
|
|
|
|
*
|
|
|
|
* 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"
|
2022-03-31 19:07:44 +00:00
|
|
|
#include "include/core/SkColorSpace.h"
|
2021-01-24 13:57:23 +00:00
|
|
|
#include "include/core/SkImage.h"
|
2020-01-28 19:12:50 +00:00
|
|
|
|
|
|
|
// 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);
|
2021-01-24 13:57:23 +00:00
|
|
|
c->drawImage(rgba.asImage(), 0,0);
|
|
|
|
c->drawImage(bgra.asImage(), 0,1);
|
2020-01-28 19:12:50 +00:00
|
|
|
c->restore();
|
|
|
|
|
|
|
|
auto grade = [&](int x, int y){
|
|
|
|
SkBitmap bm;
|
|
|
|
bm.allocPixels(SkImageInfo::Make(1,1,
|
2020-01-28 21:43:04 +00:00
|
|
|
kGray_8_SkColorType,
|
2020-01-28 19:12:50 +00:00
|
|
|
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;
|
|
|
|
}
|
|
|
|
|
2020-01-28 21:43:04 +00:00
|
|
|
// 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);
|
2020-01-28 19:12:50 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
grade(64, 64);
|
|
|
|
grade(64, 192);
|
|
|
|
}
|