OLD | NEW |
---|---|
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include <algorithm> | 5 #include <algorithm> |
6 #include <cmath> | 6 #include <cmath> |
7 | 7 |
8 #include "base/logging.h" | 8 #include "base/logging.h" |
9 #include "testing/gtest/include/gtest/gtest.h" | 9 #include "testing/gtest/include/gtest/gtest.h" |
10 #include "third_party/libpng/png.h" | 10 #include "third_party/libpng/png.h" |
(...skipping 952 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
963 PNGCodec::FORMAT_RGB, &decoded, | 963 PNGCodec::FORMAT_RGB, &decoded, |
964 &outw, &outh)); | 964 &outw, &outh)); |
965 | 965 |
966 // It should be the same as our non-alpha-channel reference. | 966 // It should be the same as our non-alpha-channel reference. |
967 ASSERT_EQ(w, outw); | 967 ASSERT_EQ(w, outw); |
968 ASSERT_EQ(h, outh); | 968 ASSERT_EQ(h, outh); |
969 ASSERT_EQ(original_rgb.size(), decoded.size()); | 969 ASSERT_EQ(original_rgb.size(), decoded.size()); |
970 ASSERT_EQ(original_rgb, decoded); | 970 ASSERT_EQ(original_rgb, decoded); |
971 } | 971 } |
972 | 972 |
973 TEST(PNGCodec, EncodeBGRASkBitmapStridePadded) { | |
974 const int kWidth = 20; | |
975 const int kHeight = 20; | |
976 const int kPaddedWidth = 32; | |
977 const int kBytesPerPixel = 4; | |
978 int paddedPixels = kPaddedWidth * kHeight; | |
Alexei Svitkine (slow)
2013/03/05 22:28:55
Please use either the kConstant or unix_hacker nam
| |
979 int rowBytes = kPaddedWidth * kBytesPerPixel; | |
Alexei Svitkine (slow)
2013/03/05 22:28:55
Please use either the kConstant or unix_hacker nam
| |
980 | |
981 SkBitmap original_bitmap; | |
982 original_bitmap.setConfig(SkBitmap::kARGB_8888_Config, | |
983 kWidth, kHeight, rowBytes); | |
984 original_bitmap.allocPixels(); | |
985 | |
986 // Write data over the source bitmap. | |
987 // We write on the pad area here too. | |
988 // The encoder should ignore the pad area. | |
989 uint32_t* src_data = original_bitmap.getAddr32(0, 0); | |
990 for (int i = 0; i < paddedPixels; i++) { | |
991 src_data[i] = SkPreMultiplyARGB(i % 255, i % 250, i % 245, i % 240); | |
992 } | |
993 | |
994 // Encode the bitmap. | |
995 std::vector<unsigned char> encoded; | |
996 PNGCodec::EncodeBGRASkBitmap(original_bitmap, false, &encoded); | |
997 | |
998 // Decode the encoded string. | |
999 SkBitmap decoded_bitmap; | |
1000 EXPECT_TRUE(PNGCodec::Decode(&encoded.front(), encoded.size(), | |
1001 &decoded_bitmap)); | |
1002 | |
1003 // Compare the original bitmap and the output bitmap. We use ColorsClose | |
1004 // as SkBitmaps are considered to be pre-multiplied, the unpremultiplication | |
1005 // (in Encode) and repremultiplication (in Decode) can be lossy. | |
1006 for (int x = 0; x < kWidth; x++) { | |
1007 for (int y = 0; y < kHeight; y++) { | |
1008 uint32_t original_pixel = original_bitmap.getAddr32(0, y)[x]; | |
1009 uint32_t decoded_pixel = decoded_bitmap.getAddr32(0, y)[x]; | |
1010 EXPECT_TRUE(ColorsClose(original_pixel, decoded_pixel)); | |
1011 } | |
1012 } | |
1013 } | |
1014 | |
973 TEST(PNGCodec, EncodeBGRASkBitmap) { | 1015 TEST(PNGCodec, EncodeBGRASkBitmap) { |
974 const int w = 20, h = 20; | 1016 const int w = 20, h = 20; |
975 | 1017 |
976 SkBitmap original_bitmap; | 1018 SkBitmap original_bitmap; |
977 MakeTestSkBitmap(w, h, &original_bitmap); | 1019 MakeTestSkBitmap(w, h, &original_bitmap); |
978 | 1020 |
979 // Encode the bitmap. | 1021 // Encode the bitmap. |
980 std::vector<unsigned char> encoded; | 1022 std::vector<unsigned char> encoded; |
981 PNGCodec::EncodeBGRASkBitmap(original_bitmap, false, &encoded); | 1023 PNGCodec::EncodeBGRASkBitmap(original_bitmap, false, &encoded); |
982 | 1024 |
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1111 ASSERT_EQ(w, outw); | 1153 ASSERT_EQ(w, outw); |
1112 ASSERT_EQ(h, outh); | 1154 ASSERT_EQ(h, outh); |
1113 ASSERT_EQ(original.size(), decoded.size()); | 1155 ASSERT_EQ(original.size(), decoded.size()); |
1114 | 1156 |
1115 // Images must be exactly equal | 1157 // Images must be exactly equal |
1116 ASSERT_TRUE(original == decoded); | 1158 ASSERT_TRUE(original == decoded); |
1117 } | 1159 } |
1118 | 1160 |
1119 | 1161 |
1120 } // namespace gfx | 1162 } // namespace gfx |
OLD | NEW |