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 Testxz {
public static void main(String[] args) {
JFrame jf = new JFrame();
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.getContentPane().add(new RotatePanel(), BorderLayout.CENTER);
jf.setPreferredSize(new Dimension(800, 800));
jf.pack();
jf.setVisible(true);
}
}class RotatePanel 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().width, getSize().height);
AffineTransform trans = new AffineTransform();
trans.setToIdentity();
// 坐标变换
trans.translate(width / 2, height / 2);
trans.scale(0.5, 0.5);
// 旋转90度
trans.rotate(Math.toRadians(90));
trans.translate(-width / 2, -height / 2);
g2D.drawImage(img, trans, this); }}这是一段实现旋转,和放大缩小的代码。
首先帮我理解下红色部分,为什么,width,height 变量引用的内容要一样哦?
如果我把trans.scale(0.5, 0.5);
改成trans.scale(1, 1);
旋转90度后,图片大小事正确的,不过,我有些疑惑,因为width,height 变量都是引用img.getHeight(this);呀
还有trans.scale(0.5, 0.5);这段代码是把图片缩小0.5倍,但我发现,图片的位置发生了移位了,为什么会这样?该怎样修改哦?请求帮助

解决方案 »

  1.   

    你可以借助java api查看,了解
      

  2.   

    package javaapplication6;
    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 Main{
    public static void main(String[] args) {
    JFrame jf = new JFrame();
    jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    jf.getContentPane().add(new RotatePanel(), BorderLayout.CENTER);
    jf.setPreferredSize(new Dimension(800, 800));
    jf.pack();
    jf.setVisible(true);
    }
    }class RotatePanel extends JPanel {
    public void init() {
    // setLayout(new BorderLayout());
    }// 重写绘制图像方法
    String url = "e:/a.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().width, getSize().height);
    AffineTransform trans = new AffineTransform();// 坐标变换
    // 旋转90度
    g2D.scale(0.5, 0.5);    //代替trans.scale(0.5, 0.5);    
    g2D.rotate(Math.toRadians(90));//代替trans.transrotate(Math.toRadians(90));
    g2D.translate(-width / 2, -width / 2);//
    g2D.drawImage(img,0,0,this);//0,0就是你要画的坐标}}
    去掉trans 全部使用g2D的方法