19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed to the Apache Software Foundation (ASF) under one or more 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * contributor license agreements. See the NOTICE file distributed with 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * this work for additional information regarding copyright ownership. 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The ASF licenses this file to You under the Apache License, Version 2.0 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * (the "License"); you may not use this file except in compliance with 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the License. You may obtain a copy of the License at 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @author Igor V. Stolyarov 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @version $Revision$ 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage java.awt.image; 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport org.apache.harmony.awt.internal.nls.Messages; 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The BandedSampleModel class provides samples of pixels in an image which is 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * stored in a band interleaved method. Each pixel's sample takes one data 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * element of the DataBuffer. The pixel stride for a BandedSampleModel is one. 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @since Android 1.0 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic final class BandedSampleModel extends ComponentSampleModel { 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Creates the indices. 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param numBands 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the num bands. 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the int[]. 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static int[] createIndices(int numBands) { 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int indices[] = new int[numBands]; 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i = 0; i < numBands; i++) { 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project indices[i] = i; 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return indices; 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Creates the offsets. 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param numBands 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the num bands. 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the int[]. 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static int[] createOffsets(int numBands) { 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int offsets[] = new int[numBands]; 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i = 0; i < numBands; i++) { 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project offsets[i] = 0; 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return offsets; 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Instantiates a new BandedSampleModel object with the specified data type 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * of samples, the width, height and bands number of image data. 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param dataType 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the data type of samples. 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param w 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the width of image data. 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param h 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the height of image data. 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param numBands 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the number of bands. 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public BandedSampleModel(int dataType, int w, int h, int numBands) { 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this(dataType, w, h, w, BandedSampleModel.createIndices(numBands), BandedSampleModel 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project .createOffsets(numBands)); 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Instantiates a new BandedSampleModel object with the specified data type 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * of samples, the width, height and bands number of image data. 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param dataType 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the data type of samples. 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param w 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the width of image data. 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param h 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the height of image data. 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param scanlineStride 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the scanline stride of the of the image data. 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param bankIndices 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the array of the bank indices. 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param bandOffsets 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the array of the band offsets. 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public BandedSampleModel(int dataType, int w, int h, int scanlineStride, int bankIndices[], 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int bandOffsets[]) { 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super(dataType, w, h, 1, scanlineStride, bankIndices, bandOffsets); 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public SampleModel createCompatibleSampleModel(int w, int h) { 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new BandedSampleModel(dataType, w, h, w, bankIndices, bandOffsets); 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public DataBuffer createDataBuffer() { 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project DataBuffer data = null; 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int size = scanlineStride * height; 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project switch (dataType) { 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case DataBuffer.TYPE_BYTE: 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project data = new DataBufferByte(size, numBanks); 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case DataBuffer.TYPE_SHORT: 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case DataBuffer.TYPE_USHORT: 1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project data = new DataBufferShort(size, numBanks); 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case DataBuffer.TYPE_INT: 1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project data = new DataBufferInt(size, numBanks); 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case DataBuffer.TYPE_FLOAT: 1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project data = new DataBufferFloat(size, numBanks); 1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case DataBuffer.TYPE_DOUBLE: 1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project data = new DataBufferDouble(size, numBanks); 1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return data; 1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public SampleModel createSubsetSampleModel(int[] bands) { 1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (bands.length > numBands) { 1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // awt.64=The number of the bands in the subset is greater than the 1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // number of bands in the sample model 1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new RasterFormatException(Messages.getString("awt.64")); //$NON-NLS-1$ 1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int indices[] = new int[bands.length]; 1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int offsets[] = new int[bands.length]; 1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i = 0; i < bands.length; i++) { 1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project indices[i] = bankIndices[bands[i]]; 1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project offsets[i] = bandOffsets[bands[i]]; 1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new BandedSampleModel(dataType, width, height, scanlineStride, indices, offsets); 1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Object getDataElements(int x, int y, Object obj, DataBuffer data) { 1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project switch (dataType) { 1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case DataBuffer.TYPE_BYTE: { 1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project byte bdata[]; 1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (obj == null) { 1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bdata = new byte[numBands]; 1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bdata = (byte[])obj; 1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i = 0; i < numBands; i++) { 1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bdata[i] = (byte)getSample(x, y, i, data); 1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project obj = bdata; 1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case DataBuffer.TYPE_SHORT: 1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case DataBuffer.TYPE_USHORT: { 1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project short sdata[]; 1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (obj == null) { 1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sdata = new short[numBands]; 1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sdata = (short[])obj; 1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i = 0; i < numBands; i++) { 1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sdata[i] = (short)getSample(x, y, i, data); 1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project obj = sdata; 1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case DataBuffer.TYPE_INT: { 1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int idata[]; 1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (obj == null) { 1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project idata = new int[numBands]; 1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project idata = (int[])obj; 2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i = 0; i < numBands; i++) { 2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project idata[i] = getSample(x, y, i, data); 2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project obj = idata; 2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case DataBuffer.TYPE_FLOAT: { 2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project float fdata[]; 2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (obj == null) { 2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project fdata = new float[numBands]; 2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project fdata = (float[])obj; 2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i = 0; i < numBands; i++) { 2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project fdata[i] = getSampleFloat(x, y, i, data); 2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project obj = fdata; 2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case DataBuffer.TYPE_DOUBLE: { 2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project double ddata[]; 2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (obj == null) { 2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ddata = new double[numBands]; 2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ddata = (double[])obj; 2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i = 0; i < numBands; i++) { 2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ddata[i] = getSampleDouble(x, y, i, data); 2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project obj = ddata; 2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return obj; 2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int[] getPixel(int x, int y, int iArray[], DataBuffer data) { 2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int pixel[]; 2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (iArray == null) { 2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project pixel = new int[numBands]; 2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project pixel = iArray; 2539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i = 0; i < numBands; i++) { 2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project pixel[i] = getSample(x, y, i, data); 2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return pixel; 2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int getSample(int x, int y, int b, DataBuffer data) { 2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (x < 0 || y < 0 || x >= this.width || y >= this.height) { 2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // awt.63=Coordinates are not in bounds 2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new ArrayIndexOutOfBoundsException(Messages.getString("awt.63")); //$NON-NLS-1$ 2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return data.getElem(bankIndices[b], y * scanlineStride + x + bandOffsets[b]); 2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public double getSampleDouble(int x, int y, int b, DataBuffer data) { 2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (x < 0 || y < 0 || x >= this.width || y >= this.height) { 2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // awt.63=Coordinates are not in bounds 2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new ArrayIndexOutOfBoundsException(Messages.getString("awt.63")); //$NON-NLS-1$ 2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return data.getElemDouble(bankIndices[b], y * scanlineStride + x + bandOffsets[b]); 2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public float getSampleFloat(int x, int y, int b, DataBuffer data) { 2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (x < 0 || y < 0 || x >= this.width || y >= this.height) { 2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // awt.63=Coordinates are not in bounds 2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new ArrayIndexOutOfBoundsException(Messages.getString("awt.63")); //$NON-NLS-1$ 2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return data.getElemFloat(bankIndices[b], y * scanlineStride + x + bandOffsets[b]); 2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int[] getSamples(int x, int y, int w, int h, int b, int iArray[], DataBuffer data) { 2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int samples[]; 2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int idx = 0; 2969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (iArray == null) { 2989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project samples = new int[w * h]; 2999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 3009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project samples = iArray; 3019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i = y; i < y + h; i++) { 3049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int j = x; j < x + w; j++) { 3059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project samples[idx++] = getSample(j, i, b, data); 3069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return samples; 3109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 3139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int hashCode() { 3149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int hash = super.hashCode(); 3159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int tmp = hash >>> 8; 3169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project hash <<= 8; 3179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project hash |= tmp; 3189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return hash ^ 0x55; 3209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 3239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setDataElements(int x, int y, Object obj, DataBuffer data) { 3249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project switch (dataType) { 3259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case DataBuffer.TYPE_BYTE: 3269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project byte bdata[] = (byte[])obj; 3279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i = 0; i < numBands; i++) { 3289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setSample(x, y, i, bdata[i] & 0xff, data); 3299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 3319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case DataBuffer.TYPE_SHORT: 3339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case DataBuffer.TYPE_USHORT: 3349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project short sdata[] = (short[])obj; 3359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i = 0; i < numBands; i++) { 3369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setSample(x, y, i, sdata[i] & 0xffff, data); 3379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 3399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case DataBuffer.TYPE_INT: 3419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int idata[] = (int[])obj; 3429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i = 0; i < numBands; i++) { 3439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setSample(x, y, i, idata[i], data); 3449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 3469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case DataBuffer.TYPE_FLOAT: 3489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project float fdata[] = (float[])obj; 3499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i = 0; i < numBands; i++) { 3509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setSample(x, y, i, fdata[i], data); 3519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 3539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case DataBuffer.TYPE_DOUBLE: 3559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project double ddata[] = (double[])obj; 3569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i = 0; i < numBands; i++) { 3579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setSample(x, y, i, ddata[i], data); 3589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 3609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 3649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setPixel(int x, int y, int iArray[], DataBuffer data) { 3659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i = 0; i < numBands; i++) { 3669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setSample(x, y, i, iArray[i], data); 3679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 3719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setPixels(int x, int y, int w, int h, int iArray[], DataBuffer data) { 3729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int idx = 0; 3739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i = y; i < y + h; i++) { 3759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int j = x; j < x + w; j++) { 3769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int n = 0; n < numBands; n++) { 3779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setSample(j, i, n, iArray[idx++], data); 3789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 3849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setSample(int x, int y, int b, double s, DataBuffer data) { 3859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (x < 0 || y < 0 || x >= this.width || y >= this.height) { 3869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // awt.63=Coordinates are not in bounds 3879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new ArrayIndexOutOfBoundsException(Messages.getString("awt.63")); //$NON-NLS-1$ 3889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project data.setElemDouble(bankIndices[b], y * scanlineStride + x + bandOffsets[b], s); 3919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 3949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setSample(int x, int y, int b, float s, DataBuffer data) { 3959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (x < 0 || y < 0 || x >= this.width || y >= this.height) { 3969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // awt.63=Coordinates are not in bounds 3979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new ArrayIndexOutOfBoundsException(Messages.getString("awt.63")); //$NON-NLS-1$ 3989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project data.setElemFloat(bankIndices[b], y * scanlineStride + x + bandOffsets[b], s); 4019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 4049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setSample(int x, int y, int b, int s, DataBuffer data) { 4059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (x < 0 || y < 0 || x >= this.width || y >= this.height) { 4069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // awt.63=Coordinates are not in bounds 4079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new ArrayIndexOutOfBoundsException(Messages.getString("awt.63")); //$NON-NLS-1$ 4089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project data.setElem(bankIndices[b], y * scanlineStride + x + bandOffsets[b], s); 4119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 4149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setSamples(int x, int y, int w, int h, int b, int iArray[], DataBuffer data) { 4159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int idx = 0; 4169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i = y; i < y + h; i++) { 4189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int j = x; j < x + w; j++) { 4199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setSample(j, i, b, iArray[idx++], data); 4209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 426