?? rotateimagedemo.java
字號(hào):
import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import java.awt.geom.AffineTransform;
import javax.swing.*;
import javax.swing.event.*;
//圖像旋轉(zhuǎn)演示
public class RotateImageDemo extends JFrame{
JSlider jSlider = new JSlider(JSlider.HORIZONTAL,0,180,0); //設(shè)定旋轉(zhuǎn)角度
ImagePane imagePane=new ImagePane(); //繪制圖像的面板
public RotateImageDemo(){
super("圖像旋轉(zhuǎn)演示"); //調(diào)用父類構(gòu)造函數(shù)
jSlider.setPaintTicks(true); //繪制標(biāo)志位
jSlider.setMajorTickSpacing(45); //設(shè)置標(biāo)志尺寸
jSlider.setMinorTickSpacing(5);
jSlider.setPaintLabels(true); //繪制出數(shù)字
jSlider.setBorder(new javax.swing.border.TitledBorder(BorderFactory.createEmptyBorder(), "圖像的旋轉(zhuǎn)度")); //設(shè)置邊框
jSlider.addChangeListener(new ChangeListener() { //滑動(dòng)條jSlider事件處理
public void stateChanged(ChangeEvent ce) {
int value=((JSlider) ce.getSource()).getValue(); //獲取設(shè)置值
double angle =(float)value/180*Math.PI ; //得到旋轉(zhuǎn)角度(弧度制)
imagePane.ratoteImage((float)angle); //旋轉(zhuǎn)圖像
}
});
Container container=getContentPane(); //得到窗口容器
imagePane.loadImage("image0.jpg"); //裝載圖片
container.add(imagePane,BorderLayout.CENTER); //增加組件到容器上
container.add(jSlider,BorderLayout.SOUTH);
setSize(250,250); //設(shè)置窗口尺寸
setVisible(true); //設(shè)置窗口可視
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //關(guān)閉窗口時(shí)退出程序
}
public static void main(String[] args){
new RotateImageDemo();
}
class ImagePane extends JPanel {
Image image;
BufferedImage bufImage; //用于顯示的緩沖區(qū)圖像
BufferedImage originalBufImage; //原始緩沖區(qū)圖像
Graphics2D bufImageG; //緩沖區(qū)圖像的圖形環(huán)境
public void loadImage(String fileName) {
image = this.getToolkit().getImage(fileName); //取得圖像
MediaTracker mt = new MediaTracker(this); //實(shí)例化媒體加載器
mt.addImage(image, 0); //增加圖像到加載器中
try {
mt.waitForAll(); //等待圖片加載
} catch (Exception ex) {
ex.printStackTrace(); //輸出出錯(cuò)信息
}
originalBufImage = new BufferedImage(image.getWidth(this),image.getHeight(this),BufferedImage.TYPE_INT_ARGB); //創(chuàng)建原始緩沖區(qū)圖像
bufImage = originalBufImage;
bufImageG = bufImage.createGraphics(); //創(chuàng)建bufImage的圖形環(huán)境
bufImageG.drawImage(image, 0, 0, this); //傳輸源圖像數(shù)據(jù)到緩沖區(qū)圖像中
repaint(); //重繪組件
}
//過濾圖像
public void ratoteImage(double angle) {
if (bufImage == null)
return; //如果bufImage為空則直接返回
BufferedImage filteredBufImage =new BufferedImage(image.getWidth(this) ,image.getHeight(this),BufferedImage.TYPE_INT_ARGB); //過濾后的圖像
AffineTransform transform = new AffineTransform(); //仿射變換對(duì)象
transform.rotate(angle,125,75); //旋轉(zhuǎn)圖像
AffineTransformOp imageOp = new AffineTransformOp(transform, null);//創(chuàng)建仿射變換操作對(duì)象
imageOp.filter(originalBufImage, filteredBufImage);//過濾圖像,目標(biāo)圖像在filteredBufImage
bufImage = filteredBufImage; //讓用于顯示的緩沖區(qū)圖像指向過濾后的圖像
repaint(); //重繪組件
}
//重載容器的paintComponent()方法
public void paint(Graphics g) {
super.paintComponent(g);
if (bufImage != null) {
Graphics2D g2 = (Graphics2D) g;
g2.drawImage(bufImage,0,0,this); //繪制圖片
}
}
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -