java之图像处理的取样,量化

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();
	}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值