现在的位置: 首页 > 综合 > 正文

swing生成图片之图片生成及显示

2018年01月30日 ⁄ 综合 ⁄ 共 3963字 ⁄ 字号 评论关闭

做项目过程中,客户要求一个功能,根据图片数据,生成图片,并对多张图片进行动画播放:

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;
    }



抱歉!评论已关闭.