bool SkPixmap::erase(const SkColor4f& origColor, const SkIRect* subset) const { SkPixmap pm; if (subset) { if (!this->extractSubset(&pm, *subset)) { return false; } } else { pm = *this; } const SkColor4f color = origColor.pin(); if (kRGBA_F16_SkColorType != pm.colorType()) { Sk4f c4 = Sk4f::Load(color.vec()); SkColor c; (c4 * Sk4f(255) + Sk4f(0.5f)).store(&c); return pm.erase(c); } const uint64_t half4 = color.premul().toF16(); for (int y = 0; y < pm.height(); ++y) { sk_memset64(pm.writable_addr64(0, y), half4, pm.width()); } return true; }
SkColor4Shader::SkColor4Shader(const SkColor4f& color, sk_sp<SkColorSpace> space) : fColorSpace(std::move(space)) , fColor4(color) , fCachedByteColor(unit_to_skcolor(color.pin(), space.get())) {}