skia2/gm/skbug_9819.cpp

56 lines
1.7 KiB
C++
Raw Normal View History

/*
* 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"
#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);
}