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倍,但我发现,图片的位置发生了移位了,为什么会这样?该怎样修改哦?请求帮助
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的方法