Index: skia/ext/image_operations_unittest.cc |
=================================================================== |
--- skia/ext/image_operations_unittest.cc (revision 14712) |
+++ skia/ext/image_operations_unittest.cc (working copy) |
@@ -5,7 +5,6 @@ |
#include <stdlib.h> |
#include "skia/ext/image_operations.h" |
-#include "skia/include/SkColorPriv.h" |
#include "testing/gtest/include/gtest/gtest.h" |
#include "SkBitmap.h" |
@@ -146,256 +145,3 @@ |
} |
} |
} |
- |
-// Blend two bitmaps together at 50% alpha and verify that the result |
-// is the middle-blend of the two. |
-TEST(ImageOperations, CreateBlendedBitmap) { |
- int src_w = 16, src_h = 16; |
- SkBitmap src_a; |
- src_a.setConfig(SkBitmap::kARGB_8888_Config, src_w, src_h); |
- src_a.allocPixels(); |
- |
- SkBitmap src_b; |
- src_b.setConfig(SkBitmap::kARGB_8888_Config, src_w, src_h); |
- src_b.allocPixels(); |
- |
- for (int y = 0, i = 0; y < src_h; y++) { |
- for (int x = 0; x < src_w; x++) { |
- *src_a.getAddr32(x, y) = SkColorSetARGB(255, 0, i * 2 % 255, i % 255); |
- *src_b.getAddr32(x, y) = |
- SkColorSetARGB((255 - i) % 255, i % 255, i * 4 % 255, 0); |
- i++; |
- } |
- } |
- |
- // Shift to red. |
- SkBitmap blended = skia::ImageOperations::CreateBlendedBitmap( |
- src_a, src_b, 0.5); |
- SkAutoLockPixels srca_lock(src_a); |
- SkAutoLockPixels srcb_lock(src_b); |
- SkAutoLockPixels blended_lock(blended); |
- |
- for (int y = 0; y < src_h; y++) { |
- for (int x = 0; x < src_w; x++) { |
- int i = y * src_w + x; |
- EXPECT_EQ((255 + ((255 - i) % 255)) / 2, |
- SkColorGetA(*blended.getAddr32(x, y))); |
- EXPECT_EQ(i % 255 / 2, |
- SkColorGetR(*blended.getAddr32(x, y))); |
- EXPECT_EQ(((i * 2) % 255 + (i * 4) % 255) / 2, |
- SkColorGetG(*blended.getAddr32(x, y))); |
- EXPECT_EQ(i % 255 / 2, |
- SkColorGetB(*blended.getAddr32(x, y))); |
- } |
- } |
-} |
- |
-// Test our masking functions. |
-TEST(ImageOperations, CreateMaskedBitmap) { |
- int src_w = 16, src_h = 16; |
- |
- SkBitmap src; |
- FillDataToBitmap(src_w, src_h, &src); |
- |
- // Generate alpha mask |
- SkBitmap alpha; |
- alpha.setConfig(SkBitmap::kARGB_8888_Config, src_w, src_h); |
- alpha.allocPixels(); |
- |
- unsigned char* src_data = |
- reinterpret_cast<unsigned char*>(alpha.getAddr32(0, 0)); |
- for (int i = 0; i < src_w * src_h; i++) { |
- src_data[i * 4] = SkColorSetARGB(i + 128 % 255, |
- i + 128 % 255, |
- i + 64 % 255, |
- i + 0 % 255); |
- } |
- |
- SkBitmap masked = skia::ImageOperations::CreateMaskedBitmap(src, alpha); |
- |
- SkAutoLockPixels src_lock(src); |
- SkAutoLockPixels masked_lock(masked); |
- for (int y = 0; y < src_h; y++) { |
- for (int x = 0; x < src_w; x++) { |
- // Test that the alpha is equal. |
- SkColor src_pixel = *src.getAddr32(x, y); |
- SkColor alpha_pixel = *alpha.getAddr32(x, y); |
- SkColor masked_pixel = *masked.getAddr32(x, y); |
- |
- // Test that the alpha is equal. |
- int alpha = (alpha_pixel & 0xff000000) >> SK_A32_SHIFT; |
- EXPECT_EQ(alpha, (masked_pixel & 0xff000000) >> SK_A32_SHIFT); |
- |
- // Test that the colors are right - SkBitmaps have premultiplied alpha, |
- // so we can't just do a direct comparison. |
- EXPECT_EQ(SkColorGetR(masked_pixel), |
- SkAlphaMul(SkColorGetR(src_pixel), alpha)); |
- } |
- } |
-} |
- |
-// Testing blur without reimplementing the blur algorithm here is tough, |
-// so we just check to see if the pixels have moved in the direction we |
-// think they should move in (and also checking the wrapping behavior). |
-// This will allow us to tweak the blur algorithm to suit speed/visual |
-// needs without breaking the fundamentals. |
-TEST(ImageOperations, CreateBlurredBitmap) { |
- int src_w = 4, src_h = 4; |
- SkBitmap src; |
- src.setConfig(SkBitmap::kARGB_8888_Config, src_w, src_h); |
- src.allocPixels(); |
- |
- for (int y = 0, i = 0; y < src_h; y++) { |
- for (int x = 0; x < src_w; x++) { |
- int r = (y == 0) ? 255 : 0; // Make the top row red. |
- int g = (i % 2 == 0) ? 255 : 0; // Make green alternate in each pixel. |
- int b = (y == src_h - 1) ? 255 : 0; // Make the bottom row blue. |
- |
- *src.getAddr32(x, y) = SkColorSetARGB(255, r, g, b); |
- i++; |
- } |
- } |
- |
- // Perform a small blur (enough to shove the values in the direction we |
- // need - more would just be an unneccessary unit test slowdown). |
- SkBitmap blurred = skia::ImageOperations::CreateBlurredBitmap(src, 2); |
- |
- SkAutoLockPixels src_lock(src); |
- SkAutoLockPixels blurred_lock(blurred); |
- for (int y = 0, i = 0; y < src_w; y++) { |
- for (int x = 0; x < src_h; x++) { |
- SkColor src_pixel = *src.getAddr32(x, y); |
- SkColor blurred_pixel = *blurred.getAddr32(x, y); |
- if (y == 0) { |
- // We expect our red to have decreased, but our blue to have |
- // increased (from the wrapping from the bottom line). |
- EXPECT_TRUE(SkColorGetR(blurred_pixel) < SkColorGetR(src_pixel)); |
- EXPECT_TRUE(SkColorGetB(blurred_pixel) > SkColorGetB(src_pixel)); |
- } else if (y == src_h - 1) { |
- // Now for the opposite. |
- EXPECT_TRUE(SkColorGetB(blurred_pixel) < SkColorGetB(src_pixel)); |
- EXPECT_TRUE(SkColorGetR(blurred_pixel) > SkColorGetR(src_pixel)); |
- } |
- |
- // Expect the green channel to have moved towards the center (but |
- // not past it). |
- if (i % 2 == 0) { |
- EXPECT_LT(SkColorGetG(blurred_pixel), SkColorGetG(src_pixel)); |
- EXPECT_GE(SkColorGetG(blurred_pixel), static_cast<uint32>(128)); |
- } else { |
- EXPECT_GT(SkColorGetG(blurred_pixel), SkColorGetG(src_pixel)); |
- EXPECT_LE(SkColorGetG(blurred_pixel), static_cast<uint32>(128)); |
- } |
- |
- i++; |
- } |
- } |
-} |
- |
-// Make sure that when shifting a bitmap without any shift parameters, |
-// the end result is close enough to the original (rounding errors |
-// notwithstanding). |
-TEST(ImageOperations, CreateHSLShiftedBitmapToSame) { |
- int src_w = 4, src_h = 4; |
- SkBitmap src; |
- src.setConfig(SkBitmap::kARGB_8888_Config, src_w, src_h); |
- src.allocPixels(); |
- |
- for (int y = 0, i = 0; y < src_h; y++) { |
- for (int x = 0; x < src_w; x++) { |
- *src.getAddr32(x, y) = SkColorSetARGB(i + 128 % 255, |
- i + 128 % 255, i + 64 % 255, i + 0 % 255); |
- i++; |
- } |
- } |
- |
- float hsl[3] = { -1, -1, -1 }; |
- |
- SkBitmap shifted = skia::ImageOperations::CreateHSLShiftedBitmap(src, hsl); |
- |
- SkAutoLockPixels src_lock(src); |
- SkAutoLockPixels shifted_lock(shifted); |
- |
- for (int y = 0; y < src_w; y++) { |
- for (int x = 0; x < src_h; x++) { |
- SkColor src_pixel = *src.getAddr32(x, y); |
- SkColor shifted_pixel = *shifted.getAddr32(x, y); |
- EXPECT_TRUE(ColorsClose(src_pixel, shifted_pixel)); |
- } |
- } |
-} |
- |
-// Shift a blue bitmap to red. |
-TEST(ImageOperations, CreateHSLShiftedBitmapHueOnly) { |
- int src_w = 16, src_h = 16; |
- SkBitmap src; |
- src.setConfig(SkBitmap::kARGB_8888_Config, src_w, src_h); |
- src.allocPixels(); |
- |
- for (int y = 0, i = 0; y < src_h; y++) { |
- for (int x = 0; x < src_w; x++) { |
- *src.getAddr32(x, y) = SkColorSetARGB(255, 0, 0, i % 255); |
- i++; |
- } |
- } |
- |
- // Shift to red. |
- float hsl[3] = { 0, -1, -1 }; |
- |
- SkBitmap shifted = skia::ImageOperations::CreateHSLShiftedBitmap(src, hsl); |
- |
- SkAutoLockPixels src_lock(src); |
- SkAutoLockPixels shifted_lock(shifted); |
- |
- for (int y = 0, i = 0; y < src_h; y++) { |
- for (int x = 0; x < src_w; x++) { |
- EXPECT_TRUE(ColorsClose(*shifted.getAddr32(x, y), |
- SkColorSetARGB(255, i % 255, 0, 0))); |
- i++; |
- } |
- } |
-} |
- |
-// Test our cropping. |
-TEST(ImageOperations, CreateCroppedBitmap) { |
- int src_w = 16, src_h = 16; |
- SkBitmap src; |
- FillDataToBitmap(src_w, src_h, &src); |
- |
- SkBitmap cropped = skia::ImageOperations::CreateTiledBitmap(src, 4, 4, |
- 8, 8); |
- ASSERT_EQ(8, cropped.width()); |
- ASSERT_EQ(8, cropped.height()); |
- |
- SkAutoLockPixels src_lock(src); |
- SkAutoLockPixels cropped_lock(cropped); |
- for (int y = 4; y < 12; y++) { |
- for (int x = 4; x < 12; x++) { |
- EXPECT_EQ(*src.getAddr32(x, y), |
- *cropped.getAddr32(x - 4, y - 4)); |
- } |
- } |
-} |
- |
-// Test whether our cropping correctly wraps across image boundaries. |
-TEST(ImageOperations, CreateCroppedBitmapWrapping) { |
- int src_w = 16, src_h = 16; |
- SkBitmap src; |
- FillDataToBitmap(src_w, src_h, &src); |
- |
- SkBitmap cropped = skia::ImageOperations::CreateTiledBitmap( |
- src, src_w / 2, src_h / 2, src_w, src_h); |
- ASSERT_EQ(src_w, cropped.width()); |
- ASSERT_EQ(src_h, cropped.height()); |
- |
- SkAutoLockPixels src_lock(src); |
- SkAutoLockPixels cropped_lock(cropped); |
- for (int y = 0; y < src_h; y++) { |
- for (int x = 0; x < src_w; x++) { |
- EXPECT_EQ(*src.getAddr32(x, y), |
- *cropped.getAddr32((x + src_w / 2) % src_w, |
- (y + src_h / 2) % src_h)); |
- } |
- } |
-} |
- |