⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lineargreytrans.java

📁 Java实现图像的可以实现JPEG图像的线性灰度变换。
💻 JAVA
字号:
/**
 * @(#)LinearGreyTrans.java
 *
 * LinearGreyTrans application
 *
 * @author :Caizhiming
 * @version 1.00 2008/11/1
 */
 import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;


 
public class LinearGreyTrans extends Frame{
    Image img,tmp;
    int i,width,height;
    int[] pixels;
    boolean flag=false;
    double a=1.1;
    int b=30;
    //LinearGreyTrans 的构造方法
    public LinearGreyTrans()
    {
    	
    	Panel m_panel;
    	Button load,run,quit;
    	
    	//添加窗口监听事件
    	addWindowListener(
    		new WindowAdapter()
    		{ 
    			public  void windowClosing(WindowEvent e) 
    		    {
    		        System.exit(0);
    	        }		
	   		});
    		
    	m_panel=new Panel(); 
    	m_panel.setBackground(Color.LIGHT_GRAY); 
    	load=new Button("装载图像");
    	run=new Button("线性变换");
    	quit=new Button("退出");
    	this.add(m_panel,BorderLayout.SOUTH);
    	m_panel.add(load);
    	m_panel.add(run);
    	m_panel.add(quit);
        
        
    	
    	// 以下三个函数为三个按钮的监听函数  注:监听到按钮事件发生后调用相应的处理函数。
        load.addActionListener(new ActionListener()
        {
        	public void actionPerformed(ActionEvent e)
        	{  Function_load_action(e);	}

       	});
        
        run.addActionListener(new ActionListener()
        {
        	public void actionPerformed(ActionEvent e)
        	{  Function_run_action(e);  }
        });
        
        quit.addActionListener(new ActionListener()
        {
           	public void actionPerformed(ActionEvent e)
        	{ Function_quit_action(e);} 
        });
        

     }  //LinearGreyTrans 的构造函数结束
    
     //以下为三个按钮消息处理函数
     public void Function_load_action(ActionEvent e)
     {
     	//利用Media Tracker跟踪图像的加载
        MediaTracker tracker=new MediaTracker(this);
        img=Toolkit.getDefaultToolkit().getImage("Nature3.jpg");
        tracker.addImage(img,0);
    
        //等待图像完全加载
        try{
    	   tracker.waitForID(0);
    	}
        catch(InterruptedException e1)
        {
    	    e1.printStackTrace();
        }
        
        //获取图像的高度height和宽度width
     	height=img.getWidth(this);
     	width=img.getHeight(this);
     	pixels=new int[width*height];
     	
     	//把图像捕获到数组pixels中
     	try{
     		PixelGrabber pg=new PixelGrabber(img,0,0,width,height,pixels,0,width);
     		pg.grabPixels();
     		}
     	catch(InterruptedException e2)
        {
    	    e2.printStackTrace();
        }
        
        //获取图像的RGB值和Alpha值  ColorModel:0xAARRGGBB
        ColorModel cm=ColorModel.getRGBdefault();
        for(i=0;i<width*height;i++)
        {
        	int alpha  =cm.getAlpha(pixels[i]);
        	int red =cm.getRed(pixels[i]);
        	int green =cm.getGreen(pixels[i]);
        	int blue =cm.getBlue(pixels[i]);
        	pixels[i] =alpha<<24 | red<<16 |green<<8|blue;
         }
         
         //将数组中的象素产生一个图像
         ImageProducer ip=new MemoryImageSource(width,height,pixels,0,width);
         tmp=createImage(ip);
         flag=true;
         repaint();
     }
     
     public void Function_run_action(ActionEvent e)
     {
     	//把图像捕获到数组pixels中
     	try{
     		PixelGrabber pg=new PixelGrabber(img,0,0,width,height,pixels,0,width);
     		pg.grabPixels();
     		}
     	catch(InterruptedException e1)
        {
    	    e1.printStackTrace();
        }
        
        //对图像进行线性拉伸,Alpha值保持不变
        ColorModel cm=ColorModel.getRGBdefault();
        for(i=0;i<width*height;i++)
        {
        	int alpha  =cm.getAlpha(pixels[i]);
        	int red =cm.getRed(pixels[i]);
        	int green =cm.getGreen(pixels[i]);
        	int blue =cm.getBlue(pixels[i]);
        	
        	//增加图像的亮度
        	red=(int)(red*a+b);
        	green=(int)(green*a+b);
        	blue=(int)(blue*a+b);
        	
        	//判断是否超过255
        	if(red>=255){red=255;}
        	if(green>=255){green=255;}
        	if(blue>=255){blue=255;}
        
        	pixels[i] =alpha<<24 | red<<16 |green<<8|blue;
         }
         
         //将数组中的象素产生一个图像
         ImageProducer ip=new MemoryImageSource(width,height,pixels,0,width);
         tmp=createImage(ip);
         flag=true;
         repaint();
     }
     
     public void Function_quit_action(ActionEvent e)
     { System.exit(0); }
     
     
    
    //调用paint()方法,显示图像
    public void paint(Graphics g)
    { 
    	if(flag)
    	{ g.drawImage(tmp,20,20,this); }
    	else{}
    }
   
 
    //定义main方法,设置窗口的大小,显示窗口	
    public static void main(String[] args) 
    {
    	
    	// TODO, add your application code
    	LinearGreyTrans LGT=new LinearGreyTrans();
    	LGT.setSize(300,300);
    	LGT.show();
    }
}

 
 	

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -