TEST(DragImageTest, InterpolationNone) { SkBitmap expectedBitmap; expectedBitmap.allocN32Pixels(4, 4); { SkAutoLockPixels lock(expectedBitmap); expectedBitmap.eraseArea(SkIRect::MakeXYWH(0, 0, 2, 2), 0xFFFFFFFF); expectedBitmap.eraseArea(SkIRect::MakeXYWH(0, 2, 2, 2), 0xFF000000); expectedBitmap.eraseArea(SkIRect::MakeXYWH(2, 0, 2, 2), 0xFF000000); expectedBitmap.eraseArea(SkIRect::MakeXYWH(2, 2, 2, 2), 0xFFFFFFFF); } SkBitmap testBitmap; testBitmap.allocN32Pixels(2, 2); { SkAutoLockPixels lock(testBitmap); testBitmap.eraseArea(SkIRect::MakeXYWH(0, 0, 1, 1), 0xFFFFFFFF); testBitmap.eraseArea(SkIRect::MakeXYWH(0, 1, 1, 1), 0xFF000000); testBitmap.eraseArea(SkIRect::MakeXYWH(1, 0, 1, 1), 0xFF000000); testBitmap.eraseArea(SkIRect::MakeXYWH(1, 1, 1, 1), 0xFFFFFFFF); } RefPtr<TestImage> testImage = TestImage::create(adoptRef(SkImage::NewFromBitmap(testBitmap))); OwnPtr<DragImage> dragImage = DragImage::create(testImage.get(), DoNotRespectImageOrientation, 1, InterpolationNone); ASSERT_TRUE(dragImage); dragImage->scale(2, 2); const SkBitmap& dragBitmap = dragImage->bitmap(); { SkAutoLockPixels lock1(dragBitmap); SkAutoLockPixels lock2(expectedBitmap); for (int x = 0; x < dragBitmap.width(); ++x) for (int y = 0; y < dragBitmap.height(); ++y) EXPECT_EQ(expectedBitmap.getColor(x, y), dragBitmap.getColor(x, y)); } }
// http://crrev.com/834303005 static sk_sp<SkShader> create_checkerboard_shader(SkColor c1, SkColor c2, int size) { SkBitmap bm; bm.allocN32Pixels(2 * size, 2 * size); bm.eraseColor(c1); bm.eraseArea(SkIRect::MakeLTRB(0, 0, size, size), c2); bm.eraseArea(SkIRect::MakeLTRB(size, size, 2 * size, 2 * size), c2); return SkShader::MakeBitmapShader(bm, SkShader::kRepeat_TileMode, SkShader::kRepeat_TileMode); }
sk_sp<SkShader> create_checkerboard_shader(SkColor c1, SkColor c2, int size) { SkBitmap bm; bm.allocPixels(SkImageInfo::MakeS32(2 * size, 2 * size, kPremul_SkAlphaType)); bm.eraseColor(c1); bm.eraseArea(SkIRect::MakeLTRB(0, 0, size, size), c2); bm.eraseArea(SkIRect::MakeLTRB(size, size, 2 * size, 2 * size), c2); return SkShader::MakeBitmapShader( bm, SkShader::kRepeat_TileMode, SkShader::kRepeat_TileMode); }
static void rotated_checkerboard_shader(SkPaint* paint, SkColor c1, SkColor c2, int size) { SkBitmap bm; bm.allocN32Pixels(2 * size, 2 * size); bm.eraseColor(c1); bm.eraseArea(SkIRect::MakeLTRB(0, 0, size, size), c2); bm.eraseArea(SkIRect::MakeLTRB(size, size, 2 * size, 2 * size), c2); SkMatrix matrix; matrix.setScale(0.75f, 0.75f); matrix.preRotate(30.0f); SkAutoTUnref<SkShader> shader( SkShader::CreateBitmapShader(bm, SkShader::kRepeat_TileMode, SkShader::kRepeat_TileMode, &matrix)); paint->setShader(shader); }