您的位置:首页 > 编程语言 > Java开发

java高保真高性能图片缩放编码

2015-07-15 16:12 561 查看
package com.zte.csp.oam.kvm;

import java.awt.BorderLayout;

import java.awt.Dimension;

import java.awt.Graphics;

import java.awt.Graphics2D;

import java.awt.Image;

import java.awt.RenderingHints;

import java.awt.Toolkit;

import java.awt.geom.AffineTransform;

import java.awt.image.BufferedImage;

import java.io.File;

import java.io.IOException;

import javax.imageio.ImageIO;

import javax.swing.JFrame;

import javax.swing.JPanel;

 public class ImagePane extends JPanel {

    static ImagePane imagep;

    BufferedImage bufferedImg;

    Image image;

    static double scaleX = 1.1, scaleY = 1.0;

    public ImagePane() {

        try {

            image = ImageIO.read(new File("C:\\mouse1.png"));

            bufferedImg = new BufferedImage(128, 128, BufferedImage.TYPE_INT_ARGB);

            bufferedImg.getGraphics().drawImage(image, 0, 0, 128, 128, null);

        } catch (IOException ex) {

            ex.printStackTrace();

        }

    }

    private void viewviewer(Graphics g, BufferedImage bufferedImg) {

        super.paintComponent(g);

        Graphics2D localGraphics2D = (Graphics2D) g;

        localGraphics2D.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_OFF);

        localGraphics2D.setRenderingHint(RenderingHints.KEY_COLOR_RENDERING, RenderingHints.VALUE_COLOR_RENDER_SPEED);

        localGraphics2D.setRenderingHint(RenderingHints.KEY_DITHERING, RenderingHints.VALUE_DITHER_DISABLE);

        localGraphics2D.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, RenderingHints.VALUE_FRACTIONALMETRICS_OFF);

        localGraphics2D.setRenderingHint(RenderingHints.KEY_ALPHA_INTERPOLATION, RenderingHints.VALUE_ALPHA_INTERPOLATION_SPEED);

        localGraphics2D.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);

        localGraphics2D.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_DEFAULT);

        localGraphics2D.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_OFF);

        AffineTransform localAffineTransform = null;

        Dimension localDimension1 = Toolkit.getDefaultToolkit().getScreenSize();

        //System.out.println("scaleX:"+scaleX+"   scaleY:"+scaleY);

        localAffineTransform = AffineTransform.getScaleInstance(scaleX, scaleY);

        localGraphics2D.drawImage(bufferedImg, localAffineTransform, this);

    }

    @Override

    protected void paintComponent(Graphics g) {

        super.paintComponent(g);

        viewviewer(g, bufferedImg);

        //g.drawImage(image, 0, 0, this);

    }

    private static void sliderVgaScaleStateChanged(javax.swing.event.ChangeEvent evt) {

        // TODO add your handling code here:

        scaleX = ((javax.swing.JSlider) evt.getSource()).getValue() / 100.0;

        scaleY = ((javax.swing.JSlider) evt.getSource()).getValue() / 100.0;

        imagep.repaint();

    }

    public static void main(String[] args) {

        JFrame frame = new JFrame();

        javax.swing.JSlider sliderVgaScale = new javax.swing.JSlider();

        sliderVgaScale.setMaximum(200);

        sliderVgaScale.setValue(100);

        sliderVgaScale.setMaximumSize(new java.awt.Dimension(200, 25));

        sliderVgaScale.addChangeListener(new javax.swing.event.ChangeListener() {

            public void stateChanged(javax.swing.event.ChangeEvent evt) {

                  sliderVgaScaleStateChanged(evt);

            }

        });

        frame.getContentPane().add(sliderVgaScale, BorderLayout.NORTH);

        imagep = new ImagePane();

        frame.getContentPane().add(imagep);

        frame.setSize(800, 600);

        frame.setVisible(true);

    }

}

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息