package com.swing.japplet;import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.geom.AffineTransform;import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JPanel;public class TestXz1 extends JPanel { public static void main(String[] args) {
JFrame jf = new JFrame();
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.getContentPane().add(new RotatePanel1(), BorderLayout.CENTER);
jf.setPreferredSize(new Dimension(800, 800));
jf.pack();
jf.setVisible(true);
}}class RotatePanel1 extends JPanel {
public void init() {
// setLayout(new BorderLayout());
}
// 重写绘制图像方法
String url = "e:/3.GIF";
Image img = new ImageIcon(url).getImage();
public void paintComponent(Graphics g) {
Graphics2D g2D = (Graphics2D) g;
int width = img.getHeight(this);
int height = img.getHeight(this);
g2D.setColor(Color.BLACK);
g2D.fillRect(0, 0, getSize().height, getSize().width);
// 坐标变换 // 旋转90度
g2D.scale(1, 1); // 代替trans.scale(0.5, 0.5);

                   g2D.rotate(Math.toRadians(90),height / 2,width / 2);// 
                  

                   g2D.drawImage(img, 0, 0, this);// 0,0就是你要画的坐标 }}
主要看红色部分,我发现运行这段代码后,图片旋转90度的倍数时候,图片大小变化了,一般都是变小了,请问,有没有办法解决哦,谢谢

解决方案 »

  1.   

    把height 和width 改成double类型 试试呢
      

  2.   


    Image img = new ImageIcon(url).getImage();
    可改为:
    String url = "testdata/img_test.gif";
    BufferedImage img = openImage(new File(url));public static BufferedImage openImage(File imageFile) {
    BufferedImage image = null;
    try {
    image = ImageIO.read(imageFile);
    } catch (Exception e) {
    e.printStackTrace();
    }

    return image;
    }
      

  3.   

    RotatePanel1中添加
    public Dimension getPreferredSize(){
        return new Dimension(img.getWidth(null),img.getHeight(null)*2);
    }
    注释掉
    jf.setPreferredSize(new Dimension(800, 800));