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 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage android.graphics; 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 19b8cbb806fc70573def954f7ba84dd7b53b3be1bdAlan Viveretteimport android.annotation.IntDef; 20b8cbb806fc70573def954f7ba84dd7b53b3be1bdAlan Viverette 21b8cbb806fc70573def954f7ba84dd7b53b3be1bdAlan Viveretteimport java.lang.annotation.Retention; 22b8cbb806fc70573def954f7ba84dd7b53b3be1bdAlan Viveretteimport java.lang.annotation.RetentionPolicy; 23b8cbb806fc70573def954f7ba84dd7b53b3be1bdAlan Viverette 24b8cbb806fc70573def954f7ba84dd7b53b3be1bdAlan Viverettepublic class PixelFormat { 25b8cbb806fc70573def954f7ba84dd7b53b3be1bdAlan Viverette 26b8cbb806fc70573def954f7ba84dd7b53b3be1bdAlan Viverette /** @hide */ 27b8cbb806fc70573def954f7ba84dd7b53b3be1bdAlan Viverette @IntDef({UNKNOWN, TRANSLUCENT, TRANSPARENT, OPAQUE}) 28b8cbb806fc70573def954f7ba84dd7b53b3be1bdAlan Viverette @Retention(RetentionPolicy.SOURCE) 29b8cbb806fc70573def954f7ba84dd7b53b3be1bdAlan Viverette public @interface Opacity {} 30b8cbb806fc70573def954f7ba84dd7b53b3be1bdAlan Viverette 31a696f5d667227365da732481770767dcb330dd23Mathias Agopian /* these constants need to match those in hardware/hardware.h */ 325d2cace4c5445915c9ea040518c59d85cfcd6b4bAndy McFadden 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int UNKNOWN = 0; 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** System chooses a format that supports translucency (many alpha bits) */ 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int TRANSLUCENT = -3; 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 385d2cace4c5445915c9ea040518c59d85cfcd6b4bAndy McFadden /** 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * System chooses a format that supports transparency 405d2cace4c5445915c9ea040518c59d85cfcd6b4bAndy McFadden * (at least 1 alpha bit) 415d2cace4c5445915c9ea040518c59d85cfcd6b4bAndy McFadden */ 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int TRANSPARENT = -2; 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** System chooses an opaque format (no alpha bits required) */ 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int OPAQUE = -1; 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int RGBA_8888 = 1; 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int RGBX_8888 = 2; 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int RGB_888 = 3; 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int RGB_565 = 4; 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 52e9d4c71f47f74ee9a4a490f62769ad010a17d19bMathias Agopian @Deprecated 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int RGBA_5551 = 6; 54e9d4c71f47f74ee9a4a490f62769ad010a17d19bMathias Agopian @Deprecated 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int RGBA_4444 = 7; 562ca204e4c0ba805c8fa0db79eeac9608d01cf5b4Mathias Agopian @Deprecated 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int A_8 = 8; 582ca204e4c0ba805c8fa0db79eeac9608d01cf5b4Mathias Agopian @Deprecated 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int L_8 = 9; 60e9d4c71f47f74ee9a4a490f62769ad010a17d19bMathias Agopian @Deprecated 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int LA_88 = 0xA; 62e9d4c71f47f74ee9a4a490f62769ad010a17d19bMathias Agopian @Deprecated 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int RGB_332 = 0xB; 64a696f5d667227365da732481770767dcb330dd23Mathias Agopian 65a696f5d667227365da732481770767dcb330dd23Mathias Agopian 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 675d2cace4c5445915c9ea040518c59d85cfcd6b4bAndy McFadden * @deprecated use {@link android.graphics.ImageFormat#NV16 68a696f5d667227365da732481770767dcb330dd23Mathias Agopian * ImageFormat.NV16} instead. 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 70a696f5d667227365da732481770767dcb330dd23Mathias Agopian @Deprecated 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int YCbCr_422_SP= 0x10; 72df4578e8ab7008a7e528d5af2ae761b33cf2bdf4Scott Main 73a696f5d667227365da732481770767dcb330dd23Mathias Agopian /** 745d2cace4c5445915c9ea040518c59d85cfcd6b4bAndy McFadden * @deprecated use {@link android.graphics.ImageFormat#NV21 75a696f5d667227365da732481770767dcb330dd23Mathias Agopian * ImageFormat.NV21} instead. 76df4578e8ab7008a7e528d5af2ae761b33cf2bdf4Scott Main */ 77a696f5d667227365da732481770767dcb330dd23Mathias Agopian @Deprecated 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int YCbCr_420_SP= 0x11; 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 80a696f5d667227365da732481770767dcb330dd23Mathias Agopian /** 815d2cace4c5445915c9ea040518c59d85cfcd6b4bAndy McFadden * @deprecated use {@link android.graphics.ImageFormat#YUY2 82a696f5d667227365da732481770767dcb330dd23Mathias Agopian * ImageFormat.YUY2} instead. 83eb68c46a40c773eb56ef7bcf8e7ece5c6a5a8d23Chih-Chung Chang */ 84a696f5d667227365da732481770767dcb330dd23Mathias Agopian @Deprecated 85eb68c46a40c773eb56ef7bcf8e7ece5c6a5a8d23Chih-Chung Chang public static final int YCbCr_422_I = 0x14; 86eb68c46a40c773eb56ef7bcf8e7ece5c6a5a8d23Chih-Chung Chang 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 885d2cace4c5445915c9ea040518c59d85cfcd6b4bAndy McFadden * @deprecated use {@link android.graphics.ImageFormat#JPEG 89a696f5d667227365da732481770767dcb330dd23Mathias Agopian * ImageFormat.JPEG} instead. 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 91a696f5d667227365da732481770767dcb330dd23Mathias Agopian @Deprecated 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int JPEG = 0x100; 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 942ca204e4c0ba805c8fa0db79eeac9608d01cf5b4Mathias Agopian public static void getPixelFormatInfo(int format, PixelFormat info) { 952ca204e4c0ba805c8fa0db79eeac9608d01cf5b4Mathias Agopian switch (format) { 962ca204e4c0ba805c8fa0db79eeac9608d01cf5b4Mathias Agopian case RGBA_8888: 972ca204e4c0ba805c8fa0db79eeac9608d01cf5b4Mathias Agopian case RGBX_8888: 982ca204e4c0ba805c8fa0db79eeac9608d01cf5b4Mathias Agopian info.bitsPerPixel = 32; 992ca204e4c0ba805c8fa0db79eeac9608d01cf5b4Mathias Agopian info.bytesPerPixel = 4; 1002ca204e4c0ba805c8fa0db79eeac9608d01cf5b4Mathias Agopian break; 1012ca204e4c0ba805c8fa0db79eeac9608d01cf5b4Mathias Agopian case RGB_888: 1022ca204e4c0ba805c8fa0db79eeac9608d01cf5b4Mathias Agopian info.bitsPerPixel = 24; 1032ca204e4c0ba805c8fa0db79eeac9608d01cf5b4Mathias Agopian info.bytesPerPixel = 3; 1042ca204e4c0ba805c8fa0db79eeac9608d01cf5b4Mathias Agopian break; 1052ca204e4c0ba805c8fa0db79eeac9608d01cf5b4Mathias Agopian case RGB_565: 1062ca204e4c0ba805c8fa0db79eeac9608d01cf5b4Mathias Agopian case RGBA_5551: 1072ca204e4c0ba805c8fa0db79eeac9608d01cf5b4Mathias Agopian case RGBA_4444: 1085d2cace4c5445915c9ea040518c59d85cfcd6b4bAndy McFadden case LA_88: 1092ca204e4c0ba805c8fa0db79eeac9608d01cf5b4Mathias Agopian info.bitsPerPixel = 16; 1102ca204e4c0ba805c8fa0db79eeac9608d01cf5b4Mathias Agopian info.bytesPerPixel = 2; 1112ca204e4c0ba805c8fa0db79eeac9608d01cf5b4Mathias Agopian break; 1122ca204e4c0ba805c8fa0db79eeac9608d01cf5b4Mathias Agopian case A_8: 1132ca204e4c0ba805c8fa0db79eeac9608d01cf5b4Mathias Agopian case L_8: 1142ca204e4c0ba805c8fa0db79eeac9608d01cf5b4Mathias Agopian case RGB_332: 1152ca204e4c0ba805c8fa0db79eeac9608d01cf5b4Mathias Agopian info.bitsPerPixel = 8; 1162ca204e4c0ba805c8fa0db79eeac9608d01cf5b4Mathias Agopian info.bytesPerPixel = 1; 1172ca204e4c0ba805c8fa0db79eeac9608d01cf5b4Mathias Agopian break; 1182ca204e4c0ba805c8fa0db79eeac9608d01cf5b4Mathias Agopian case YCbCr_422_SP: 1192ca204e4c0ba805c8fa0db79eeac9608d01cf5b4Mathias Agopian case YCbCr_422_I: 1202ca204e4c0ba805c8fa0db79eeac9608d01cf5b4Mathias Agopian info.bitsPerPixel = 16; 1212ca204e4c0ba805c8fa0db79eeac9608d01cf5b4Mathias Agopian info.bytesPerPixel = 1; 1222ca204e4c0ba805c8fa0db79eeac9608d01cf5b4Mathias Agopian break; 1232ca204e4c0ba805c8fa0db79eeac9608d01cf5b4Mathias Agopian case YCbCr_420_SP: 1242ca204e4c0ba805c8fa0db79eeac9608d01cf5b4Mathias Agopian info.bitsPerPixel = 12; 1252ca204e4c0ba805c8fa0db79eeac9608d01cf5b4Mathias Agopian info.bytesPerPixel = 1; 1262ca204e4c0ba805c8fa0db79eeac9608d01cf5b4Mathias Agopian break; 1272ca204e4c0ba805c8fa0db79eeac9608d01cf5b4Mathias Agopian default: 12894814218d2313a989a5a8969f633e3fc33e43071Igor Murashkin throw new IllegalArgumentException("unknown pixel format " + format); 1292ca204e4c0ba805c8fa0db79eeac9608d01cf5b4Mathias Agopian } 1302ca204e4c0ba805c8fa0db79eeac9608d01cf5b4Mathias Agopian } 1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static boolean formatHasAlpha(int format) { 1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project switch (format) { 1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case PixelFormat.A_8: 1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case PixelFormat.LA_88: 1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case PixelFormat.RGBA_4444: 1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case PixelFormat.RGBA_5551: 1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case PixelFormat.RGBA_8888: 1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case PixelFormat.TRANSLUCENT: 1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case PixelFormat.TRANSPARENT: 1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return true; 1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1455d2cace4c5445915c9ea040518c59d85cfcd6b4bAndy McFadden 1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int bytesPerPixel; 1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int bitsPerPixel; 14894814218d2313a989a5a8969f633e3fc33e43071Igor Murashkin 14994814218d2313a989a5a8969f633e3fc33e43071Igor Murashkin /** 15094814218d2313a989a5a8969f633e3fc33e43071Igor Murashkin * Determine whether or not this is a public-visible and non-deprecated {@code format}. 15194814218d2313a989a5a8969f633e3fc33e43071Igor Murashkin * 15294814218d2313a989a5a8969f633e3fc33e43071Igor Murashkin * <p>In particular, {@code @hide} formats will return {@code false}.</p> 15394814218d2313a989a5a8969f633e3fc33e43071Igor Murashkin * 15494814218d2313a989a5a8969f633e3fc33e43071Igor Murashkin * <p>Any other indirect formats (such as {@code TRANSPARENT} or {@code TRANSLUCENT}) 15594814218d2313a989a5a8969f633e3fc33e43071Igor Murashkin * will return {@code false}.</p> 15694814218d2313a989a5a8969f633e3fc33e43071Igor Murashkin * 15794814218d2313a989a5a8969f633e3fc33e43071Igor Murashkin * @param format an integer format 15894814218d2313a989a5a8969f633e3fc33e43071Igor Murashkin * @return a boolean 15994814218d2313a989a5a8969f633e3fc33e43071Igor Murashkin * 16094814218d2313a989a5a8969f633e3fc33e43071Igor Murashkin * @hide 16194814218d2313a989a5a8969f633e3fc33e43071Igor Murashkin */ 16294814218d2313a989a5a8969f633e3fc33e43071Igor Murashkin public static boolean isPublicFormat(int format) { 16394814218d2313a989a5a8969f633e3fc33e43071Igor Murashkin switch (format) { 16494814218d2313a989a5a8969f633e3fc33e43071Igor Murashkin case RGBA_8888: 16594814218d2313a989a5a8969f633e3fc33e43071Igor Murashkin case RGBX_8888: 16694814218d2313a989a5a8969f633e3fc33e43071Igor Murashkin case RGB_888: 16794814218d2313a989a5a8969f633e3fc33e43071Igor Murashkin case RGB_565: 16894814218d2313a989a5a8969f633e3fc33e43071Igor Murashkin return true; 16994814218d2313a989a5a8969f633e3fc33e43071Igor Murashkin } 17094814218d2313a989a5a8969f633e3fc33e43071Igor Murashkin 17194814218d2313a989a5a8969f633e3fc33e43071Igor Murashkin return false; 17294814218d2313a989a5a8969f633e3fc33e43071Igor Murashkin } 1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 174