19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2006 The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License. 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 171a44d5dcabc18cd5ef111f732ccff91683a1a093Neal Nguyenpackage android.graphics; 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.test.suitebuilder.annotation.SmallTest; 20aad8ae3e3d2befab6f800f62b90cd669b029ab60sergeyv 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport junit.framework.TestCase; 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class BitmapTest extends TestCase { 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @SmallTest 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void testBasic() throws Exception { 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Bitmap bm1 = Bitmap.createBitmap(100, 200, Bitmap.Config.ARGB_8888); 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Bitmap bm2 = Bitmap.createBitmap(100, 200, Bitmap.Config.RGB_565); 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Bitmap bm3 = Bitmap.createBitmap(100, 200, Bitmap.Config.ARGB_4444); 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertTrue("mutability", bm1.isMutable()); 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertTrue("mutability", bm2.isMutable()); 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertTrue("mutability", bm3.isMutable()); 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals("width", 100, bm1.getWidth()); 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals("width", 100, bm2.getWidth()); 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals("width", 100, bm3.getWidth()); 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals("rowbytes", 400, bm1.getRowBytes()); 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals("rowbytes", 200, bm2.getRowBytes()); 42656117bed2fc1937bcebd615898924ed57c48979sergeyv assertEquals("rowbytes", 400, bm3.getRowBytes()); 43656117bed2fc1937bcebd615898924ed57c48979sergeyv 44f7f9d9c39df22ad6929f001f07588469f77e8bf5Jesse Wilson assertEquals("byteCount", 80000, bm1.getByteCount()); 45f7f9d9c39df22ad6929f001f07588469f77e8bf5Jesse Wilson assertEquals("byteCount", 40000, bm2.getByteCount()); 46656117bed2fc1937bcebd615898924ed57c48979sergeyv assertEquals("byteCount", 80000, bm3.getByteCount()); 47f7f9d9c39df22ad6929f001f07588469f77e8bf5Jesse Wilson 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals("height", 200, bm1.getHeight()); 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals("height", 200, bm2.getHeight()); 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals("height", 200, bm3.getHeight()); 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertTrue("hasAlpha", bm1.hasAlpha()); 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertFalse("hasAlpha", bm2.hasAlpha()); 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertTrue("hasAlpha", bm3.hasAlpha()); 55656117bed2fc1937bcebd615898924ed57c48979sergeyv 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertTrue("getConfig", bm1.getConfig() == Bitmap.Config.ARGB_8888); 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertTrue("getConfig", bm2.getConfig() == Bitmap.Config.RGB_565); 58656117bed2fc1937bcebd615898924ed57c48979sergeyv assertTrue("getConfig", bm3.getConfig() == Bitmap.Config.ARGB_8888); 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @SmallTest 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void testMutability() throws Exception { 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Bitmap bm1 = Bitmap.createBitmap(100, 200, Bitmap.Config.ARGB_8888); 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Bitmap bm2 = Bitmap.createBitmap(new int[100 * 200], 100, 200, 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Bitmap.Config.ARGB_8888); 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertTrue("mutability", bm1.isMutable()); 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertFalse("mutability", bm2.isMutable()); 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bm1.eraseColor(0); 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bm2.eraseColor(0); 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project fail("eraseColor should throw exception"); 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (IllegalStateException ex) { 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // safe to catch and ignore this 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @SmallTest 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void testGetPixelsWithAlpha() throws Exception { 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int[] colors = new int[100]; 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i = 0; i < 100; i++) { 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project colors[i] = (0xFF << 24) | (i << 16) | (i << 8) | i; 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Bitmap bm = Bitmap.createBitmap(colors, 10, 10, 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Bitmap.Config.ARGB_8888); 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int[] pixels = new int[100]; 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bm.getPixels(pixels, 0, 10, 0, 0, 10, 10); 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i = 0; i < 100; i++) { 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int p = bm.getPixel(i % 10, i / 10); 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals("getPixels", p, pixels[i]); 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i = 0; i < 100; i++) { 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int p = bm.getPixel(i % 10, i / 10); 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals("getPixel", p, colors[i]); 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals("pixel value", p, 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ((0xFF << 24) | (i << 16) | (i << 8) | i)); 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @SmallTest 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void testGetPixelsWithoutAlpha() throws Exception { 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int[] colors = new int[100]; 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i = 0; i < 100; i++) { 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project colors[i] = (0xFF << 24) | (i << 16) | (i << 8) | i; 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Bitmap bm = Bitmap.createBitmap(colors, 10, 10, Bitmap.Config.RGB_565); 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int[] pixels = new int[100]; 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bm.getPixels(pixels, 0, 10, 0, 0, 10, 10); 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i = 0; i < 100; i++) { 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int p = bm.getPixel(i % 10, i / 10); 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals("getPixels", p, pixels[i]); 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @SmallTest 1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void testSetPixelsWithAlpha() throws Exception { 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int[] colors = new int[100]; 1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i = 0; i < 100; i++) { 1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project colors[i] = (0xFF << 24) | (i << 16) | (i << 8) | i; 1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Bitmap.Config config = Bitmap.Config.ARGB_8888; 1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Bitmap bm1 = Bitmap.createBitmap(colors, 10, 10, config); 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Bitmap bm2 = Bitmap.createBitmap(10, 10, config); 1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i = 0; i < 100; i++) { 1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bm2.setPixel(i % 10, i / 10, colors[i]); 1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i = 0; i < 100; i++) { 1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals("setPixel", 1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bm1.getPixel(i % 10, i / 10), bm2.getPixel(i % 10, i / 10)); 1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i = 0; i < 100; i++) { 1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals("setPixel value", 1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bm1.getPixel(i % 10, i / 10), colors[i]); 1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @SmallTest 1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void testSetPixelsWithoutAlpha() throws Exception { 1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int[] colors = new int[100]; 1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i = 0; i < 100; i++) { 1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project colors[i] = (0xFF << 24) | (i << 16) | (i << 8) | i; 1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Bitmap.Config config = Bitmap.Config.RGB_565; 1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Bitmap bm1 = Bitmap.createBitmap(colors, 10, 10, config); 1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Bitmap bm2 = Bitmap.createBitmap(10, 10, config); 1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i = 0; i < 100; i++) { 1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bm2.setPixel(i % 10, i / 10, colors[i]); 1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i = 0; i < 100; i++) { 1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals("setPixel", bm1.getPixel(i % 10, i / 10), 1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bm2.getPixel(i % 10, i / 10)); 1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static int computePrePostMul(int alpha, int comp) { 1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (alpha == 0) { 1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return 0; 1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int premul = Math.round(alpha * comp / 255.f); 1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int unpre = Math.round(255.0f * premul / alpha); 1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return unpre; 1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @SmallTest 1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void testSetPixelsWithNonOpaqueAlpha() throws Exception { 1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int[] colors = new int[256]; 1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i = 0; i < 256; i++) { 1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project colors[i] = (i << 24) | (0xFF << 16) | (0x80 << 8) | 0; 1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 185656117bed2fc1937bcebd615898924ed57c48979sergeyv 1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Bitmap.Config config = Bitmap.Config.ARGB_8888; 1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // create a bitmap with the color array specified 1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Bitmap bm1 = Bitmap.createBitmap(colors, 16, 16, config); 190656117bed2fc1937bcebd615898924ed57c48979sergeyv 1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // create a bitmap with no colors, but then call setPixels 1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Bitmap bm2 = Bitmap.createBitmap(16, 16, config); 1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bm2.setPixels(colors, 0, 16, 0, 0, 16, 16); 1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // now check that we did a good job returning the unpremultiplied alpha 1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final int tolerance = 1; 1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i = 0; i < 256; i++) { 1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int c0 = colors[i]; 1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int c1 = bm1.getPixel(i % 16, i / 16); 2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int c2 = bm2.getPixel(i % 16, i / 16); 201656117bed2fc1937bcebd615898924ed57c48979sergeyv 2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // these two should always be identical 2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals("getPixel", c1, c2); 204656117bed2fc1937bcebd615898924ed57c48979sergeyv 2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // comparing the original (c0) with the returned color is tricky, 2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // since it gets premultiplied during the set(), and unpremultiplied 2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // by the get(). 2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int a0 = Color.alpha(c0); 2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int a1 = Color.alpha(c1); 2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals("alpha", a0, a1); 211656117bed2fc1937bcebd615898924ed57c48979sergeyv 2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int r0 = Color.red(c0); 2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int r1 = Color.red(c1); 2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int rr = computePrePostMul(a0, r0); 2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertTrue("red", Math.abs(rr - r1) <= tolerance); 216656117bed2fc1937bcebd615898924ed57c48979sergeyv 2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int g0 = Color.green(c0); 2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int g1 = Color.green(c1); 2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int gg = computePrePostMul(a0, g0); 2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertTrue("green", Math.abs(gg - g1) <= tolerance); 221656117bed2fc1937bcebd615898924ed57c48979sergeyv 2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int b0 = Color.blue(c0); 2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int b1 = Color.blue(c1); 2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int bb = computePrePostMul(a0, b0); 2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertTrue("blue", Math.abs(bb - b1) <= tolerance); 226656117bed2fc1937bcebd615898924ed57c48979sergeyv 2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (false) { 2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int cc = Color.argb(a0, rr, gg, bb); 2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project android.util.Log.d("skia", "original " + Integer.toHexString(c0) + 2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project " set+get " + Integer.toHexString(c1) + 2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project " local " + Integer.toHexString(cc)); 2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 235656117bed2fc1937bcebd615898924ed57c48979sergeyv 236656117bed2fc1937bcebd615898924ed57c48979sergeyv @SmallTest 237656117bed2fc1937bcebd615898924ed57c48979sergeyv public void testCreateHardwareBitmapFromGraphicBuffer() { 238656117bed2fc1937bcebd615898924ed57c48979sergeyv GraphicBuffer buffer = GraphicBuffer.create(10, 10, PixelFormat.RGBA_8888, 239656117bed2fc1937bcebd615898924ed57c48979sergeyv GraphicBuffer.USAGE_HW_TEXTURE | GraphicBuffer.USAGE_SOFTWARE_MASK); 240656117bed2fc1937bcebd615898924ed57c48979sergeyv Canvas canvas = buffer.lockCanvas(); 241656117bed2fc1937bcebd615898924ed57c48979sergeyv canvas.drawColor(Color.YELLOW); 242656117bed2fc1937bcebd615898924ed57c48979sergeyv buffer.unlockCanvasAndPost(canvas); 243656117bed2fc1937bcebd615898924ed57c48979sergeyv Bitmap hardwareBitmap = Bitmap.createHardwareBitmap(buffer); 244656117bed2fc1937bcebd615898924ed57c48979sergeyv assertTrue(hardwareBitmap.isPremultiplied()); 245656117bed2fc1937bcebd615898924ed57c48979sergeyv assertFalse(hardwareBitmap.isMutable()); 246656117bed2fc1937bcebd615898924ed57c48979sergeyv } 2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 248