天天看點

BufferredImage 轉換為ImageData

public void setImage(final BufferedImage bufferedImage) {

BufferedImage scaledImage = new BufferedImage(bufferedImage.getWidth(),

bufferedImage.getHeight(), BufferedImage.TYPE_INT_ARGB);//把現有的bufferedImage的顔色模式轉換為DirectColorModel

Graphics2D localGraphics2D = scaledImage.createGraphics();

localGraphics2D.drawImage(bufferedImage, 0, 0, scaledImage.getWidth(),

scaledImage.getHeight(), null);

localGraphics2D.dispose();

ImageData imageData = convertToSWT(scaledImage);

//label.setImage(new Image(Display.getDefault(), imageData));

}

public static ImageData convertToSWT(BufferedImage bufferedImage) {

if (bufferedImage.getColorModel() instanceof DirectColorModel) {

DirectColorModel colorModel = (DirectColorModel) bufferedImage

.getColorModel();

PaletteData palette = new PaletteData(colorModel.getRedMask(),

colorModel.getGreenMask(), colorModel.getBlueMask());

ImageData data = new ImageData(bufferedImage.getWidth(),

bufferedImage.getHeight(), colorModel.getPixelSize(),

palette);

WritableRaster raster = bufferedImage.getRaster();

int[] pixelArray = new int[4];

for (int y = 0; y < data.height; y++) {

for (int x = 0; x < data.width; x++) {

raster.getPixel(x, y, pixelArray);

int pixel = palette.getPixel(new RGB(pixelArray[0],

pixelArray[1], pixelArray[2]));

data.setPixel(x, y, pixel);

}

}

return data;

} else if (bufferedImage.getColorModel() instanceof IndexColorModel) {

IndexColorModel colorModel = (IndexColorModel) bufferedImage

.getColorModel();

int size = colorModel.getMapSize();

byte[] reds = new byte[size];

byte[] greens = new byte[size];

byte[] blues = new byte[size];

colorModel.getReds(reds);

colorModel.getGreens(greens);

colorModel.getBlues(blues);

RGB[] rgbs = new RGB[size];

for (int i = 0; i < rgbs.length; i++) {

rgbs[i] = new RGB(reds[i] & 0xFF, greens[i] & 0xFF,

blues[i] & 0xFF);

}

PaletteData palette = new PaletteData(rgbs);

ImageData data = new ImageData(bufferedImage.getWidth(),

bufferedImage.getHeight(), colorModel.getPixelSize(),

palette);

data.transparentPixel = colorModel.getTransparentPixel();

WritableRaster raster = bufferedImage.getRaster();

int[] pixelArray = new int[1];

for (int y = 0; y < data.height; y++) {

for (int x = 0; x < data.width; x++) {

raster.getPixel(x, y, pixelArray);

data.setPixel(x, y, pixelArray[0]);

}

}

return data;

}

return null;

}