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之图像处理的取样,量化
猜你喜欢
转载自blog.csdn.net/bentleydelll/article/details/80305335
今日推荐
周排行