package comTest;
import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import java.io.File;
import javax.swing.*;
public class Sample extends Frame{
Image im,tmp;
int iw,ih;
int[] pixels;
boolean flag=false;
public Sample() {
super("Sample");
Panel pdown;
Button load,run,quit;
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
pdown=new Panel();
pdown.setBackground(Color.LIGHT_GRAY);;
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_ActionPerformed1(e);
}
});
run.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
jRun_ActionPerformed1(e);
}
});
quit.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
jQuit_ActionPerformed1(e);
}
});
}
public void jLoad_ActionPerformed1(ActionEvent e){
MediaTracker tracker=new MediaTracker(this);
im=Toolkit.getDefaultToolkit().getImage("E:\\matlabpicture"+
File.separator+"20180422.jpg");
tracker.addImage(im, 0);
try {
tracker.waitForID(0);;
}catch(InterruptedException e2) {
e2.printStackTrace();
}
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_ActionPerformed1(ActionEvent e) {
try {
PixelGrabber pg=new PixelGrabber(im,0,0,iw,ih,pixels,0,iw);
pg.grabPixels();
}catch(InterruptedException e3){
e3.printStackTrace();
}
//设定
int grey=iw;
String s=JOptionPane.showInputDialog(null, "请输入N值(256/128/64/32/16/8):");
if(s!=null) {
grey=Integer.parseInt(s);
}
//检查输入是否正确
if((grey>256)|(grey<8)){
grey=256;
JOptionPane.showMessageDialog(null, "输入不正确,请重新输入!");
}
//对图像进行采样
ColorModel cm=ColorModel.getRGBdefault();
for(int i=0;i<iw*ih-1;i=i+(int)(256/grey))
{
int red,green,blue;
int alpha=cm.getAlpha(pixels[i]);
red=cm.getRed(pixels[i]);
green=cm.getGreen(pixels[i]);
blue=cm.getBlue(pixels[i]);
for(int j=0;j<(int)(256/grey);j++) {
pixels[i+j]=alpha<<24|red<<16|green<<8|blue;
}
}
ImageProducer ip=new MemoryImageSource(iw,ih,pixels,0,iw);
tmp=createImage(ip);
flag=true;
repaint();
}
public void jQuit_ActionPerformed1(ActionEvent e) {
System.exit(0);
}
public void paint(Graphics g) {
if(flag) {
g.drawImage(tmp, 10, 20, this);
}else {
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Sample sample=new Sample();
sample.setLocation(300,200);
sample.setSize(350,350);
sample.show();
}
}
java之图像处理的取样,量化
最新推荐文章于 2023-09-05 17:03:10 发布