做项目过程中,客户要求一个功能,根据图片数据,生成图片,并对多张图片进行动画播放:
1.生成并显示图片:
// 表格键盘事件,选择一条数据并显示图片
filenametable.addKeyListener(new KeyAdapter() {
public void keyReleased(final KeyEvent event) {
if (event.getKeyCode() == KeyEvent.VK_UP
|| event.getKeyCode() == KeyEvent.VK_DOWN) {
tCurrentRow = filenametable
.convertRowIndexToModel(filenametable
.getSelectedRow());
showDisplayImage();//生成并显示图片的方法
}
}
});
//生成Image图像
private void showDisplayImage() {
if (tCurrentRow < 0) {
return;
}
byte[] imageContent = null;
if (contenes != null && contenes.size() > 0)
{//content是一个list,存放生成图片的数据
WDBImageRadar imageSatellite = contenes.get(tCurrentRow);
imageContent = imageSatellite.getContent();
Image image = null;
image = Toolkit.getDefaultToolkit().createImage(imageContent);//生成图片
imagePane.setImage(image);//imagePane是显示图片的panel
imagePane.repaint();
}
}
//显示图片的panel--ImagePanel
public void paintComponent(Graphics g1) {//override
super.paintComponent(g1);
if (playMany) {//是否播放
if (images != null && images.size() > 0) {
image = images.get(currentImage);
Graphics2D G2 = (Graphics2D) g1;
int panelSize_w = this.getWidth();
int panelSize_h = this.getHeight();
ImageIcon inc = new ImageIcon(getImage());
float rate = image.getWidth(null) * 1.0f
/ image.getHeight(null);
int w = (int) (panelSize_w / rate);
int y = (panelSize_h - w) / 2;
ResampleOp resampleOp = new ResampleOp(panelSize_w, w);// 转换
BufferedImage rescaledTomato = resampleOp.filter(
convertImageToBuffer(image), null);
Image imageTem = Toolkit.getDefaultToolkit().createImage(
rescaledTomato.getSource());
G2.drawImage(imageTem, 0, y, panelSize_w, w, this);
int tCurrentRow = infoIndex[currentImage];
if (isStatelLive) {
statelLitFrame.settCurrentRow(tCurrentRow);
statelLitFrame.getFilenametable().setRowSelectionInterval(
tCurrentRow, tCurrentRow);
} else {
radarFrame.settCurrentRow(tCurrentRow);
radarFrame.getFilenametable().setRowSelectionInterval(
tCurrentRow, tCurrentRow);
}
currentImage = currentImage + 1;
}
if (currentImage == images.size()) {
if (isCycle) {//是否循环
currentImage = 0;
} else {
this.stopAnimation();
cleckCount = 1;
}
}
} else {
if (this.getImage() != null) {
Graphics2D G2 = (Graphics2D) g1;
int panelSize_w = this.getWidth();
int panelSize_h = this.getHeight();
ImageIcon inc = new ImageIcon(getImage());
float rate = image.getWidth(null) * 1.0f
/ image.getHeight(null);
int w = (int) (panelSize_w / rate);
int y = (panelSize_h - w) / 2;
ResampleOp resampleOp = new ResampleOp(panelSize_w, w);// 转换
BufferedImage rescaledTomato = resampleOp.filter(
convertImageToBuffer(image), null);
imageTemp = Toolkit.getDefaultToolkit().createImage(
rescaledTomato.getSource());
G2.drawImage(imageTemp, 0, y, panelSize_w, w, this);
}
}
}
private BufferedImage convertImageToBuffer(Image pic) {
BufferedImage bufferedImage = null;
Graphics g = null;
bufferedImage = new BufferedImage(pic.getWidth(null),
pic.getHeight(null), BufferedImage.TYPE_INT_RGB);
g = bufferedImage.createGraphics();
g.drawImage(pic, 0, 0, null);
g.dispose();
return bufferedImage;
}