Java SDK 1.4之后,对图片处理的功能得到了很大的提升。其提供的ImageIO类提供了近乎
傻瓜式的操作。现在让我们看看他们给我们带来什么样的惊喜。
读取图形并且显示的核心代码:
public void showPic(){
File f=new File("e:/tt.jpg");
BufferedImage image=null;
try {
image = ImageIO.read(f);
} catch (IOException ex) {
Logger.getLogger(JavaImage.class.getName()).log(Level.SEVERE, null, ex);
}
setContentPane(new JLabel(new ImageIcon(image)));
validate();
}
结果如下:
同理写入一个文件也是相当的简单.
使用ImageIO.write(BufferedImage image,String format,File f)就可以了。
当然如果你还需要其他的处理比如添加字到图片上,变形图片等,那么就需要其他的Java2d的知识了,这不在我们现在的讨论范围之内。
那么如果你想图区gif动画,并且希望分离出所有的图片,那么该如何实现呢?
核心代码如下
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
JFileChooser chooser=new JFileChooser();
//chooser.setCurrentDirectory(new File("."));
final List list=new ArrayList();
list.add("jpg");
list.add("png");
list.add("gif");
chooser.setFileFilter(new javax.swing.filechooser.FileFilter() {
@Override
public boolean accept(File f) {
if(f.isDirectory())return true;
String name=f.getName();
int p=name.lastIndexOf('.');
if(p==-1)return false;
String suffix=name.substring(p+1).toLowerCase();
return list.contains(suffix);
}
@Override
public String getDescription() {
return "image files";
}
});
int r=chooser.showOpenDialog(this);
if(r!=JFileChooser.APPROVE_OPTION)return;
File f=chooser.getSelectedFile();
String name=f.getName();
String suffix=name.substring(name.lastIndexOf('.')+1);
Iterator iter=ImageIO.getImageReadersByFormatName(suffix);
ImageReader reader=null;
Box box=Box.createVerticalBox();
while(iter.hasNext())
{
reader=(ImageReader)iter.next();
}
ImageInputStream imagein=null;
BufferedImage[] bi=null;
try {
imagein = ImageIO.createImageInputStream(f);
reader.setInput(imagein);
int count=reader.getNumImages(true);
bi=new BufferedImage[count];
for(int i=0;i<count;i++)
{
bi[i]=reader.read(i);
box.add(new JLabel(new ImageIcon(bi[i])));
}
} catch (IOException ex) {
Logger.getLogger(JavaImage.class.getName()).log(Level.SEVERE, null, ex);
}
setContentPane(new JScrollPane(box));
validate();
}
结果如下图:
让我们解释一下其中的一些代码。
前面有一部分是JFileChooser文件过滤选择的一些代码。这块我们暂且不分析。我们
看看下面的。
Iterator iter=ImageIO.getImageReadersByFormatName(suffix);
通过文件格式获得相应ImageReader ,当然这里的返回值是一个迭代器.
while(iter.hasNext())
{
reader=(ImageReader)iter.next();
}
通过遍历获得相应的ImageReader。
接下来的代码主要是获得相应的图片的输入流。
int count=reader.getNumImages(true); 得到gif图片内部包含的图片数。
bi[i]=reader.read(i);获得相应的内部图片
——————————————
新网站上线 欢迎大家
网站信息发布中心 在这里有各种交易信息的发布。同时提供
一些软件的免费使用(附有源码)。
网站博客系统 这里你可以注册自己的博客。一个账户无限量博客
联系方式: support@websiteempire.cn
QQ:563828566
MSN:zhuhailin123@hotmail.com