/* WignerMapImageProvider.java created 2008-03-03
*
*/
package org.signalml.app.view.book.wignermap;
import java.awt.image.BufferedImage;
import java.awt.image.DataBuffer;
import java.awt.image.DataBufferByte;
import java.awt.image.IndexColorModel;
import java.awt.image.Raster;
import java.awt.image.WritableRaster;
import org.apache.log4j.Logger;
/** WignerMapImageProvider
*
*
* @author Michal Dobaczewski © 2007-2008 CC Otwarte Systemy Komputerowe Sp. z o.o.
*/
public class WignerMapImageProvider {
private static final int PALETTE_SIZE = 256;
protected static final Logger logger = Logger.getLogger(WignerMapImageProvider.class);
public BufferedImage getImage(double[][] map, int width, int height, WignerMapPalette palette) {
int[] paletteBuffer = palette.getPalette();
byte[] byteBuffer = new byte[width*height];
int i = 0;
for (int y=0; y<height; y++) {
for (int x=0; x<width; x++) {
byteBuffer[i] = (byte) StrictMath.floor(0.5+(255*map[x][height-1-y]));
i++;
}
}
DataBufferByte buffer = new DataBufferByte(byteBuffer, i);
IndexColorModel colorModel = new IndexColorModel(8,PALETTE_SIZE,paletteBuffer,0,false,-1,DataBuffer.TYPE_BYTE);
WritableRaster raster = Raster.createWritableRaster(colorModel.createCompatibleSampleModel(width, height), buffer, null);
BufferedImage image = new BufferedImage(colorModel, raster, true, null);
return image;
}
}