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; }
sk_sp<SkShader> SkShader::MakeColorShader(const SkColor4f& color, sk_sp<SkColorSpace> space) { if (!SkScalarsAreFinite(color.vec(), 4)) { return nullptr; } return sk_make_sp<SkColor4Shader>(color, std::move(space)); }
SkColor4f SkColor4f::FromColor(SkColor bgra) { SkColor4f rgba; swizzle_rb(Sk4f_fromS32(bgra)).store(rgba.vec()); return rgba; }