sample29_6.java

来自「Java SE 6.0前27-31章示的示例代码,简单易学」· Java 代码 · 共 97 行

JAVA
97
字号
package wyf.jc;
import java.awt.*;
import javax.swing.*;
import java.awt.image.*;
import java.awt.color.*;
import java.io.*;
public class Sample29_6 extends JFrame
{
	//创建显示源图像的标签
	JLabel jls=new JLabel();
	//将显示源图象的标签放到滚动窗格中
	JScrollPane jspz=new JScrollPane(jls);
	//创建显示目标图像的标签
	JLabel jlt=new JLabel();
	//将显示目标图象的标签放到滚动窗格中
	JScrollPane jspy=new JScrollPane(jlt);
	//创建分割窗格
	JSplitPane jsp=new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,jspz,jspy);
	//创建文件选择器
	JFileChooser jfc=new JFileChooser("D:\\");
	public Sample29_6()
	{
		//加载选择的图片
		ImageIcon ii=this.chooserFile();
		//将图片设置到源标签中
		jls.setIcon(ii);
		//设置源图象标签的水平、垂直对齐方式为居中
		jls.setVerticalAlignment(JLabel.CENTER);
		jls.setHorizontalAlignment(JLabel.CENTER);
		//设置目标图象标签的水平、垂直对齐方式为居中
		jlt.setVerticalAlignment(JLabel.CENTER);
		jlt.setHorizontalAlignment(JLabel.CENTER);
		//获取处理后图象对应的图标
		ii=this.processGrayImage(ii.getImage());
		//将处理后的图片设置到目标标签中
		jlt.setIcon(ii);
		//设置分隔条的初始位置
		jsp.setDividerLocation(500);
		//设置分隔条的宽度
		jsp.setDividerSize(4);
		//将分割窗格添加到窗体中
		this.add(jsp);
		//设置窗体的标题、大小位置以及可见性
		this.setTitle("图像灰度处理演示");
		this.setBounds(0,0,1000,500);
		this.setVisible(true);
		//设置窗体的默认关闭动作
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);		
	}
	//加载选中图片的方法
	public ImageIcon chooserFile()
	{
		//弹出文件选择器
		int i=jfc.showOpenDialog(this);
		//获取选择文件的路径
		String dir=(jfc.getSelectedFile()!=null)?(jfc.getSelectedFile().getPath()):null;
		if(dir!=null&&!dir.equals(""))
		{
			//按指定的路径加载图片到图标对象中并返回			
			return new ImageIcon(dir);
		}
		else
		{
			return null;
		}		
	}	
	//对图象进行灰度处理的方法
	public ImageIcon processGrayImage(Image source)
	{
		//获取图像的宽度与高度
		int width=source.getWidth(null);
		int height=source.getHeight(null);
		//创建表示源图象的BufferedImage对象
		BufferedImage sourceBuf=new BufferedImage(
			                           width,height,BufferedImage.TYPE_INT_ARGB);
		//创建表示处理后目标图象的BufferedImage对象
		BufferedImage targetBuf=new BufferedImage(
			                        width,height,BufferedImage.TYPE_USHORT_GRAY);
		//获取表示源图象的BufferedImage对象的画笔
		Graphics g=sourceBuf.getGraphics();
		//将待处理的图像绘制到源BufferedImage对像中
		g.drawImage(source,0,0,Color.white,null);      
		//创建用来进行灰度处理的ColorConvertOp对象
		ColorConvertOp cco=new ColorConvertOp(ColorSpace.getInstance(ColorSpace.CS_sRGB),
		                                 ColorSpace.getInstance(ColorSpace.CS_GRAY),null);
		//进行灰度处理
		cco.filter(sourceBuf,targetBuf);      
		//返回处理后图像对应的图标对象
		return new ImageIcon(targetBuf);
	}	
	public static void main(String[] args)
	{
		//创建Sample29_6窗体对象
		new Sample29_6();
	}
}

⌨️ 快捷键说明

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