package org.vfny.geoserver.wms.responses.map.worldwind; import gov.nasa.worldwind.formats.dds.DDSConverter; import gov.nasa.worldwind.util.Logging; import java.awt.image.BufferedImage; import java.awt.image.RenderedImage; import java.io.IOException; import java.io.OutputStream; import java.nio.ByteBuffer; import java.util.Collections; import java.util.Set; import org.geoserver.wms.WMS; import org.vfny.geoserver.wms.WmsException; import org.vfny.geoserver.wms.responses.DefaultRasterMapProducer; public class DDSMapProducer extends DefaultRasterMapProducer { /** the only MIME type this map producer supports */ static final String MIME_TYPE = "image/dds"; /** * convenient singleton Set to expose the output format this producer * supports */ private static final Set SUPPORTED_FORMATS = Collections .singleton(MIME_TYPE); public DDSMapProducer(WMS wms) { super(MIME_TYPE, wms); } public void formatImageOutputStream(RenderedImage img, OutputStream os) throws WmsException, IOException { if (img instanceof BufferedImage) { BufferedImage bimg = (BufferedImage) img; ByteBuffer bb = DDSConverter.convertToDxt3(bimg); saveBuffer(bb,os); } } public static boolean saveBuffer(ByteBuffer buffer, OutputStream os) throws IOException { if (buffer == null) { String message = "nullValue.BufferNull"; Logging.logger().severe(message); throw new IllegalArgumentException(message); } if (os == null) { String message = "nullValue.FileIsNull"; Logging.logger().severe(message); throw new IllegalArgumentException(message); } int numBytesRead = 0; //WWIO.saveBuffer(buffer, new File("C:\\testdds\\image.dds")); os.write(buffer.array()); return true; } }