根据文件扩展名得到文件对应该类型Icon方法

根据文件扩展名得到文件对应该类型Icon方法

package com.fleety.util;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GraphicsConfiguration;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import java.awt.HeadlessException;
import java.awt.Image;
import java.awt.Transparency;
import java.awt.image.BufferedImage;
import java.awt.image.ColorModel;
import java.awt.image.PixelGrabber;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import sun.awt.shell.ShellFolder;
public class CommonTool {
 public static BufferedImage getImageByFileTyle(String filename)
 throws FileNotFoundException {
  File file = null;
  String extension = filename.substring(filename.lastIndexOf("."))
  .toLowerCase();
  try {
   file = File.createTempFile("icon", extension);
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  return toBufferedImage(toImage(toIcon(file)));
 }
 public static Icon toIcon(File file) throws FileNotFoundException {
  ShellFolder shellFolder = ShellFolder.getShellFolder(file);
  Icon icon = new ImageIcon(shellFolder.getIcon(true));
  return icon;
 }
 public static Image toImage(Icon icon) {
  if (icon instanceof ImageIcon) {
   return ((ImageIcon) icon).getImage();
  } else {
   int w = icon.getIconWidth();
   int h = icon.getIconHeight();
   GraphicsEnvironment ge = GraphicsEnvironment
   .getLocalGraphicsEnvironment();
   GraphicsDevice gd = ge.getDefaultScreenDevice();
   GraphicsConfiguration gc = gd.getDefaultConfiguration();
   BufferedImage image = gc.createCompatibleImage(w, h);
   Graphics2D g = image.createGraphics();
   icon.paintIcon(null, g, 0, 0);
   g.dispose();
   return image;
  }
 }
 private static boolean hasAlpha(Image image) {
  // If buffered image, the color model is readily available
  if (image instanceof BufferedImage) {
   BufferedImage bimage = (BufferedImage) image;
   return bimage.getColorModel().hasAlpha();
  }
  // Use a pixel grabber to retrieve the image's color model;
  // grabbing a single pixel is usually sufficient
  PixelGrabber pg = new PixelGrabber(image, 0, 0, 1, 1, false);
  try {
   pg.grabPixels();
  } catch (InterruptedException e) {
  }
  // Get the image's color model
  ColorModel cm = pg.getColorModel();
  return cm.hasAlpha();
 }
 // This method returns a buffered image with the contents of an image
 public static BufferedImage toBufferedImage(Image image) {
  if (image instanceof BufferedImage) {
   return (BufferedImage) image;
  }
  // This code ensures that all the pixels in the image are loaded
  image = new ImageIcon(image).getImage();
  // Determine if the image has transparent pixels; for this method's
  // implementation, see Determining If an Image Has Transparent Pixels
  boolean hasAlpha = hasAlpha(image);
  // Create a buffered image with a format that's compatible with the
  // screen
  BufferedImage bimage = null;
  GraphicsEnvironment ge = GraphicsEnvironment
  .getLocalGraphicsEnvironment();
  try {
   // Determine the type of transparency of the new buffered image
   int transparency = Transparency.OPAQUE;
   if (hasAlpha) {
    transparency = Transparency.BITMASK;
   }
   // Create the buffered image
   GraphicsDevice gs = ge.getDefaultScreenDevice();
   GraphicsConfiguration gc = gs.getDefaultConfiguration();
   bimage = gc.createCompatibleImage(image.getWidth(null), image
   .getHeight(null), transparency);
  } catch (HeadlessException e) {
   // The system does not have a screen
  }
  if (bimage == null) {
   // Create a buffered image using the default color model
   int type = BufferedImage.TYPE_INT_RGB;
   if (hasAlpha) {
    type = BufferedImage.TYPE_INT_ARGB;
   }
   bimage = new BufferedImage(image.getWidth(null), image
   .getHeight(null), type);
  }
  // Copy image to buffered image
  Graphics g = bimage.createGraphics();
  // Paint the image onto the buffered image
  g.drawImage(image, 0, 0, null);
  g.dispose();
  return bimage;
 }
}

 

转载于:https://my.oschina.net/u/1458864/blog/268446

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值