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