本文整理汇总了C++中SkPreMultiplyColor函数的典型用法代码示例。如果您正苦于以下问题:C++ SkPreMultiplyColor函数的具体用法?C++ SkPreMultiplyColor怎么用?C++ SkPreMultiplyColor使用的例子?那么, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了SkPreMultiplyColor函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: createTexture
/**
* Create a red & green stripes on black texture
*/
void createTexture() {
if (fTextureCreated) {
return;
}
static const int xSize = 16;
static const int ySize = 16;
fTexture.allocN32Pixels(xSize, ySize);
SkPMColor* addr = fTexture.getAddr32(0, 0);
for (int y = 0; y < ySize; ++y) {
for (int x = 0; x < xSize; ++x) {
addr[y*xSize+x] = SkPreMultiplyColor(SK_ColorBLACK);
if ((y % 5) == 0) {
addr[y*xSize+x] = SkPreMultiplyColor(SK_ColorRED);
}
if ((x % 7) == 0) {
addr[y*xSize+x] = SkPreMultiplyColor(SK_ColorGREEN);
}
}
}
fTextureCreated = true;
}
示例2: compare_procs
static bool compare_procs(SkXfermodeProc proc32, SkXfermodeProc4f proc4f) {
const float kTolerance = 1.0f / 255;
const SkColor colors[] = {
0, 0xFF000000, 0xFFFFFFFF, 0x80FF0000
};
for (auto s32 : colors) {
SkPMColor s_pm32 = SkPreMultiplyColor(s32);
SkPM4f s_pm4f = SkColor4f::FromColor(s32).premul();
for (auto d32 : colors) {
SkPMColor d_pm32 = SkPreMultiplyColor(d32);
SkPM4f d_pm4f = SkColor4f::FromColor(d32).premul();
SkPMColor r32 = proc32(s_pm32, d_pm32);
SkPM4f r4f = proc4f(s_pm4f, d_pm4f);
SkPM4f r32_4f = SkPM4f::FromPMColor(r32);
if (!nearly_equal(r4f, r32_4f, kTolerance)) {
return false;
}
}
}
return true;
}
示例3: make_ringed_color_bitmap
/** Create a black and white checked bitmap with 2 1-pixel rings around the outside edge.
The inner ring is red and the outer ring is blue. */
static bool make_ringed_color_bitmap(TestPixels* result, int width, int height) {
const SkPMColor kBlue = SkPreMultiplyColor(SK_ColorBLUE);
const SkPMColor kRed = SkPreMultiplyColor(SK_ColorRED);
const SkPMColor kBlack = SkPreMultiplyColor(SK_ColorBLACK);
const SkPMColor kWhite = SkPreMultiplyColor(SK_ColorWHITE);
return make_ringed_bitmap<SkPMColor>(result, width, height, kN32_SkColorType,
kPremul_SkAlphaType, kBlue, kRed, kBlack, kWhite);
}
示例4: OvalTestView
OvalTestView() {
fSize.set(SK_Scalar1, SK_Scalar1);
fBitmap.setConfig(SkBitmap::kARGB_8888_Config, kILimit, kILimit);
fBitmap.allocPixels();
fInsideColor = SkPreMultiplyColor(SK_ColorRED);
fOutsideColor = SkPreMultiplyColor(SK_ColorGREEN);
}
示例5: make_ringed_oversized_color_texture_bitmap
/** Make the color version of the oversized texture-backed bitmap */
static bool make_ringed_oversized_color_texture_bitmap(GrContext* ctx, TestPixels* result,
int width, int height) {
static const SkPMColor kBlue = SkPreMultiplyColor(SK_ColorBLUE);
static const SkPMColor kRed = SkPreMultiplyColor(SK_ColorRED);
static const SkPMColor kBlack = SkPreMultiplyColor(SK_ColorBLACK);
static const SkPMColor kWhite = SkPreMultiplyColor(SK_ColorWHITE);
static const SkPMColor kGreen = SkPreMultiplyColor(SK_ColorGREEN);
return make_oversized_texture_bitmap<SkPMColor>(
ctx, result, width, height, kSkia8888_GrPixelConfig, kBlue, kRed, kBlack, kWhite, kGreen);
}
示例6: DEF_GPUTEST_FOR_NATIVE_CONTEXT
DEF_GPUTEST_FOR_NATIVE_CONTEXT(SkImage_NewFromTexture, reporter, context) {
GrTextureProvider* provider = context->textureProvider();
const int w = 10;
const int h = 10;
SkPMColor storage[w * h];
const SkPMColor expected0 = SkPreMultiplyColor(SK_ColorRED);
sk_memset32(storage, expected0, w * h);
GrSurfaceDesc desc;
desc.fFlags = kRenderTarget_GrSurfaceFlag; // needs to be a rendertarget for readpixels();
desc.fOrigin = kDefault_GrSurfaceOrigin;
desc.fWidth = w;
desc.fHeight = h;
desc.fConfig = kSkia8888_GrPixelConfig;
desc.fSampleCnt = 0;
SkAutoTUnref<GrTexture> tex(provider->createTexture(desc, false, storage, w * 4));
if (!tex) {
REPORTER_ASSERT(reporter, false);
return;
}
GrBackendTextureDesc backendDesc;
backendDesc.fConfig = kSkia8888_GrPixelConfig;
backendDesc.fFlags = kRenderTarget_GrBackendTextureFlag;
backendDesc.fWidth = w;
backendDesc.fHeight = h;
backendDesc.fSampleCnt = 0;
backendDesc.fTextureHandle = tex->getTextureHandle();
TextureReleaseChecker releaseChecker;
SkAutoTUnref<SkImage> refImg(
SkImage::NewFromTexture(context, backendDesc, kPremul_SkAlphaType,
TextureReleaseChecker::Release, &releaseChecker));
SkAutoTUnref<SkImage> cpyImg(SkImage::NewFromTextureCopy(context, backendDesc,
kPremul_SkAlphaType));
check_image_color(reporter, refImg, expected0);
check_image_color(reporter, cpyImg, expected0);
// Now lets jam new colors into our "external" texture, and see if the images notice
const SkPMColor expected1 = SkPreMultiplyColor(SK_ColorBLUE);
sk_memset32(storage, expected1, w * h);
tex->writePixels(0, 0, w, h, kSkia8888_GrPixelConfig, storage, GrContext::kFlushWrites_PixelOp);
// The cpy'd one should still see the old color
#if 0
// There is no guarantee that refImg sees the new color. We are free to have made a copy. Our
// write pixels call violated the contract with refImg and refImg is now undefined.
check_image_color(reporter, refImg, expected1);
#endif
check_image_color(reporter, cpyImg, expected0);
// Now exercise the release proc
REPORTER_ASSERT(reporter, 0 == releaseChecker.fReleaseCount);
refImg.reset(nullptr); // force a release of the image
REPORTER_ASSERT(reporter, 1 == releaseChecker.fReleaseCount);
}
示例7: xferColor
static SkColor xferColor(SkColor src, SkColor dst, SkXfermode::Mode mode) {
switch (mode) {
case SkXfermode::kSrc_Mode:
return src;
case SkXfermode::kDst_Mode:
return dst;
default: {
SkPMColor pmS = SkPreMultiplyColor(src);
SkPMColor pmD = SkPreMultiplyColor(dst);
SkPMColor result = SkXfermode::GetProc(mode)(pmS, pmD);
return SkUnPreMultiply::PMColorToColor(result);
}
}
}
示例8: test_fast_interp
static inline void test_fast_interp(skiatest::Reporter* reporter) {
SkRandom r;
U8CPU a0 = 0;
U8CPU a255 = 255;
for (int i = 0; i < 200; i++) {
SkColor colorSrc = r.nextU();
SkColor colorDst = r.nextU();
SkPMColor src = SkPreMultiplyColor(colorSrc);
SkPMColor dst = SkPreMultiplyColor(colorDst);
REPORTER_ASSERT(reporter, SkFastFourByteInterp(src, dst, a0) == dst);
REPORTER_ASSERT(reporter, SkFastFourByteInterp(src, dst, a255) == src);
}
}
示例9: make_bm
static void make_bm(SkBitmap* bm) {
const SkPMColor colors[] = {
SkPreMultiplyColor(SK_ColorRED), SkPreMultiplyColor(SK_ColorGREEN),
SkPreMultiplyColor(SK_ColorBLUE), SkPreMultiplyColor(SK_ColorWHITE)
};
SkColorTable* ctable = new SkColorTable(colors, 4);
bm->allocPixels(SkImageInfo::Make(2, 2, kIndex_8_SkColorType,
kOpaque_SkAlphaType),
nullptr, ctable);
ctable->unref();
*bm->getAddr8(0, 0) = 0;
*bm->getAddr8(1, 0) = 1;
*bm->getAddr8(0, 1) = 2;
*bm->getAddr8(1, 1) = 3;
}
示例10: DEF_TEST
DEF_TEST(Color4f_colorfilter, reporter) {
struct {
SkColorFilter* (*fFact)();
bool fSupports4f;
const char* fName;
} recs[] = {
{ make_mode_cf, true, "mode" },
{ make_mx_cf, true, "matrix" },
{ make_compose_cf, true, "compose" },
};
// prepare the src
const int N = 100;
SkPMColor src4b[N];
SkPM4f src4f[N];
SkRandom rand;
for (int i = 0; i < N; ++i) {
src4b[i] = SkPreMultiplyColor(rand.nextU());
src4f[i] = SkPM4f::FromPMColor(src4b[i]);
}
// confirm that our srcs are (nearly) equal
REPORTER_ASSERT(reporter, compare_spans(src4f, src4b, N));
for (const auto& rec : recs) {
SkAutoTUnref<SkColorFilter> filter(rec.fFact());
SkPMColor dst4b[N];
filter->filterSpan(src4b, N, dst4b);
SkPM4f dst4f[N];
filter->filterSpan4f(src4f, N, dst4f);
REPORTER_ASSERT(reporter, compare_spans(dst4f, dst4b, N));
}
}
示例11: createChecker
static SkShader* createChecker() {
// SkColor colors[] = { 0xFFFDFDFD, 0xFFF4F4F4 };
SkColor colors[] = { 0xFFFFFFFF, 0xFFFFFFFF };
SkBitmap bm;
bm.allocN32Pixels(2, 2);
bm.lockPixels();
*bm.getAddr32(0, 0) = *bm.getAddr32(1, 1) = SkPreMultiplyColor(colors[0]);
*bm.getAddr32(0, 1) = *bm.getAddr32(1, 0) = SkPreMultiplyColor(colors[1]);
SkShader* s = SkShader::CreateBitmapShader(bm, SkShader::kRepeat_TileMode,
SkShader::kRepeat_TileMode);
SkMatrix m;
m.setScale(12, 12);
s->setLocalMatrix(m);
return s;
}
示例12: SkPreMultiplyColor
void SkGL::SetColor(SkColor c) {
SkPMColor pm = SkPreMultiplyColor(c);
gl_pmcolor(SkGetPackedR32(pm),
SkGetPackedG32(pm),
SkGetPackedB32(pm),
SkGetPackedA32(pm));
}
示例13: INHERITED
SkARGB4444_Blitter::SkARGB4444_Blitter(const SkBitmap& device,
const SkPaint& paint) : INHERITED(device) {
// cache premultiplied versions in 4444
SkPMColor c = SkPreMultiplyColor(paint.getColor());
fPMColor16 = SkPixel32ToPixel4444(c);
if (paint.isDither()) {
fPMColor16Other = SkDitherPixel32To4444(c);
} else {
fPMColor16Other = fPMColor16;
}
// cache raw versions in 4444
fRawColor16 = SkPackARGB4444(0xFF >> 4, SkColorGetR(c) >> 4,
SkColorGetG(c) >> 4, SkColorGetB(c) >> 4);
if (paint.isDither()) {
fRawColor16Other = SkDitherARGB32To4444(0xFF, SkColorGetR(c),
SkColorGetG(c), SkColorGetB(c));
} else {
fRawColor16Other = fRawColor16;
}
fScale16 = SkAlpha15To16(SkGetPackedA4444(fPMColor16Other));
if (16 == fScale16) {
// force the original to also be opaque
fPMColor16 |= (0xF << SK_A4444_SHIFT);
}
}
示例14: FromColor_D32
static void FromColor_D32(void* dst, const SkColor src[], int width,
int, int) {
SkPMColor* d = (SkPMColor*)dst;
for (int i = 0; i < width; i++) {
*d++ = SkPreMultiplyColor(*src++);
}
}
示例15: test_premul
static inline void test_premul(skiatest::Reporter* reporter) {
for (int a = 0; a <= 255; a++) {
for (int x = 0; x <= 255; x++) {
SkColor c0 = SkColorSetARGB(a, x, x, x);
SkPMColor p0 = SkPreMultiplyColor(c0);
SkColor c1 = SkUnPreMultiply::PMColorToColor(p0);
SkPMColor p1 = SkPreMultiplyColor(c1);
// we can't promise that c0 == c1, since c0 -> p0 is a many to one
// function, however, we can promise that p0 -> c1 -> p1 : p0 == p1
REPORTER_ASSERT(reporter, p0 == p1);
{
int ax = SkMulDiv255Ceiling(x, a);
REPORTER_ASSERT(reporter, ax <= a);
}
}
}
}