Я пишу aplha составное тестовое приложение на основе этого примера
/* Create an ARGB BufferedImage */
BufferedImage img = (BufferedImage)image;//ImageIO.read(imageSrc);
int w = img.getWidth(null);
int h = img.getHeight(null);
BufferedImage bi = new BufferedImage(w, h, BufferedImage.TYPE_4BYTE_ABGR_PRE);
Graphics g = bi.getGraphics();
g.drawImage(img, 0, 0, null);
/* Create a rescale filter op that makes the image 50% opaque */
float[] scales = { 1f, 1f, 1f, 1f };
float[] offsets = new float[4];
RescaleOp rop = new RescaleOp(scales, offsets, null);
/* Draw the image, applying the filter */
g2d.drawImage(bi, rop, 0, 0);
ссылка на источник: http://download.oracle.com/javase/tutorial/2d/images/drawimage.html
Отлично работает с простыми изображениями, но с фотографиями (jpg и т. Д.) Я получаю следующее исключение:
java.lang.IllegalArgumentException:
Количество констант масштабирования не
равное количество цвета или
цвет / альфа-компоненты
Чтобы быть более понятным ... Вот мой адаптированный класс тестового кода. Этот стиль кода выдает исключение ...
public class ImageTest extends JLabel {
public Image image;
private BufferedImage bImage;
ImageObserver imageObserver;
float[] scales = {1f, 1f, 1f, 1f};
float[] offsets = new float[4];
RescaleOp rop;
int width;
int height;
public ImageTest(ImageIcon icon) {
width = icon.getIconWidth();
height = icon.getIconHeight();
this.image = icon.getImage();
this.imageObserver = icon.getImageObserver();
//this.bImage=(BufferedImage)image; //previous version (makes exception?)...
this.bImage = new BufferedImage(
width, height, BufferedImage.TYPE_INT_ARGB);
this.bImage.createGraphics().drawImage(
this.image, 0, 0, width, height, imageObserver);
rop = new RescaleOp(scales, offsets, null);
this.repaint();
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
g2d.drawImage(this.bImage, rop, 0, 0);
}
public void setRescaleOp(RescaleOp rop) {
this.rop = rop;
}
}//class end
Я не совсем уверен, откуда исходит исключение, поэтому мне нужен ваш совет, где посмотреть?
P.S. Я полагаю, что это проблема IndexColorModel, но если это так, я не уверен, как это исправить ...
Любой полезный комментарий приветствуется:)
Andrew