?? sharpimage.java
字號:
//SharpImage.java
/*
程序說明:對圖像進行平尖銳化處理
公式為:sharpRed=Math.abs(red6-red5)+Math.abs(red8-red5);
sharpGreen=Math.abs(green6-green5)+Math.abs(green8-green5);
sharpBlue=Math.abs(blue6-blue5)+Math.abs(blue8-blue5);
程序修改:
最后修改時間:2003-12
作者:haibin
*/
import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import javax.swing.*;
public class SharpImage extends Frame {
Image im,tmp;
int iw,ih;
int[] pixels;
boolean flag=false;
//構造方法
public SharpImage(){
super("圖象尖銳化處理");
Panel pdown;
Button load,run,quit;
//添加窗口監聽事件
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
pdown = new Panel();
pdown.setBackground(Color.lightGray);
load=new Button("裝載圖像");
run = new Button("圖像尖銳化");
quit=new Button("退出");
this.add(pdown,BorderLayout.SOUTH);
pdown.add(load);
pdown.add(run);
pdown.add(quit);
load.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
jLoad_ActionPerformed(e);
}
});
run.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
jRun_ActionPerformed(e);
}
});
quit.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
jQuit_ActionPerformed(e);
}
});
}
public void jLoad_ActionPerformed(ActionEvent e){
//利用MediaTracker跟蹤圖像的加載
MediaTracker tracker = new MediaTracker(this);
im=Toolkit.getDefaultToolkit().getImage("Miss.jpg");
tracker.addImage(im,0);
//等待圖像的完全加載
try{
tracker.waitForID(0);
}catch(InterruptedException e2){ e2.printStackTrace();}
//獲取圖像的寬度iw和高度ih
iw=im.getWidth(this);
ih=im.getHeight(this);
pixels=new int[iw*ih];
try{
PixelGrabber pg=new PixelGrabber(im,0,0,iw,ih,pixels,0,iw);
pg.grabPixels();
}catch (InterruptedException e3) {
e3.printStackTrace();
}
//將數組中的象素產生一個圖像
ImageProducer ip=new MemoryImageSource(iw,ih,pixels,0,iw);
tmp=createImage(ip);
flag=true;
repaint();
}
public void jRun_ActionPerformed(ActionEvent e){
if(flag){
try{
PixelGrabber pg=new PixelGrabber(im,0,0,iw,ih,pixels,0,iw);
pg.grabPixels();
}catch (InterruptedException e3) {
e3.printStackTrace();
}
//象素的中間變量
int tempPixels[]=new int[iw*ih];
for(int i=0;i<iw*ih;i++)
{
tempPixels[i]=pixels[i];
}
//對圖像進行尖銳化處理,Alpha值保持不變
ColorModel cm=ColorModel.getRGBdefault();
for(int i=1;i<ih-1;i++)
{
for(int j=1;j<iw-1;j++)
{
int alpha=cm.getAlpha(pixels[i*iw+j]);
//對圖像進行尖銳化
int red6=cm.getRed(pixels[i*iw+j+1]);
int red5=cm.getRed(pixels[i*iw+j]);
int red8=cm.getRed(pixels[(i+1)*iw+j]);
int sharpRed=Math.abs(red6-red5)+Math.abs(red8-red5);
int green5=cm.getGreen(pixels[i*iw+j]);
int green6=cm.getGreen(pixels[i*iw+j+1]);
int green8=cm.getGreen(pixels[(i+1)*iw+j]);
int sharpGreen=Math.abs(green6-green5)+Math.abs(green8-green5);
int blue5=cm.getBlue(pixels[i*iw+j]);
int blue6=cm.getBlue(pixels[i*iw+j+1]);
int blue8=cm.getBlue(pixels[(i+1)*iw+j]);
int sharpBlue=Math.abs(blue6-blue5)+Math.abs(blue8-blue5);
if(sharpRed>255) {sharpRed=255;}
if(sharpGreen>255) {sharpGreen=255;}
if(sharpBlue>255) {sharpBlue=255;}
tempPixels[i*iw+j]=alpha<<24|sharpRed<<16|sharpGreen<<8|sharpBlue;
}
}
//將數組中的象素產生一個圖像
ImageProducer ip=new MemoryImageSource(iw,ih,tempPixels,0,iw);
tmp=createImage(ip);
flag=true;
repaint();
}else{
JOptionPane.showMessageDialog(null,"請先打開一幅圖片!",
"Alert",JOptionPane.WARNING_MESSAGE);
}
}
public void jQuit_ActionPerformed(ActionEvent e){
//System.exit(0);
JOptionPane op =new JOptionPane();
int exit=op.showConfirmDialog(this,"你要退出嗎? ? ?","退出",JOptionPane.YES_NO_OPTION);
if(exit==JOptionPane.YES_OPTION)
{
System.exit(0);
}else{ }
}
//調用paint()方法,顯示圖像信息。
public void paint(Graphics g){
if(flag){
g.drawImage(tmp,10,20,this);
}else { }
}
//定義main方法,設置窗口的大小,顯示窗口
public static void main(String[] args) {
SharpImage si = new SharpImage();
si.setLocation(50,50);
si.setSize(500,400);
si.show();
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -