package gov.nasa.worldwind.formats.nitfs; import gov.nasa.worldwind.formats.dds.DDSConverter; /* Copyright (C) 2001, 2007 United States Government as represented by the Administrator of the National Aeronautics and Space Administration. All Rights Reserved. */ /** * @author Lado Garakanidze * @version $Id: Cib2DdsCompress Apr 23, 2007 10:59:01 AM lado */ class CIB2DDSCompress extends AbstractRPF2DDSCompress { public DDSBlock4x4 compressDxt1Block4x4(NITFSImageBand imageBand, byte[] pixelCodes, boolean hasTransparentPixels) { int[] grayPixels = new int[16]; int minColor = Integer.MAX_VALUE; int maxColor = Integer.MIN_VALUE; for(int i = 0; i < pixelCodes.length; i++ ) { grayPixels[i] = imageBand.lookupGray( 0xFF & pixelCodes[i]); if(grayPixels[i] < minColor) minColor = grayPixels[i]; if(grayPixels[i] > maxColor) maxColor = grayPixels[i]; } DDSBlock4x4 ddsBlock = new DDSBlock4x4( (short) DDSConverter.getPixel565( new Color( maxColor, maxColor, maxColor ) ), (short) DDSConverter.getPixel565( new Color( minColor, minColor, minColor ) ), 0); if(maxColor != minColor) { int[] ext = new int[] { maxColor, minColor, (2 * maxColor + minColor)/3, (maxColor + 2 * minColor)/3 }; ddsBlock.bitmask = 0; for (int i = 0; i < grayPixels.length; i++) { int closest = Integer.MAX_VALUE; int mask = 0; for (int j = 0; j < ext.length; j++) { int d = ( ext[j] >= grayPixels[i] ) ? (ext[j] - grayPixels[i]) : (grayPixels[i] - ext[j]); if (d < closest) { closest = d; mask = j; } } ddsBlock.bitmask |= mask << i * 2; } } return ddsBlock; } }