2016-10-07 8 views
1

私はこれを見ていたquestionと私は最初の答えを見ていた。 Javaのファイルのアイコンの特定のバージョンを取得

は、だから私はこのコードを使用してみました:

public static Image getIcon(String fileName) throws Exception { 
    File file = new File(fileName); 
    FileSystemView view = FileSystemView.getFileSystemView(); 
    Icon icon = view.getSystemIcon(file); 
    ImageIcon imageIcon = (ImageIcon) icon; 
    Image image = imageIcon.getImage(); 
    return image; 
} 

Imageを返さない(またはErrorをスロー)が、Imageはひどく低い解像度を持っています。

これは、16x16 Imageが返されたためと考えています。

返信する方法はありますか?Image返品しますか?

+0

「特定のバージョン」と「どの画像」とは、システム提供の画像と同じタイプですが、48×48などの高解像度ですか? – VGR

+0

@VGR正しいです –

+1

このリンクが役立つかもしれません。あなたhttp://www.java2s.com/Tutorial/Java/0180__File/Geticonforfiletype.htm –

答えて

2

Javaは、ファイルのアイコンを取得するために、次の2つの可能性を提供しています。
は、あなたはすでに最初のものを知っている:あなたは16×16ピクセルの結果を与える

Icon icon = FileSystemView.getFileSystemView().getSystemIcon(new File(FILENAME)); 

を。

ShellFolder

Icon icon = new ImageIcon(ShellFolder.getShellFolder(new File(FILENAME)).getIcon(true)); 

を使用して他の一つはあなたgetIcon方法でブールフラグgetLargeIconに応じて大きい方(32×32)を取得します。
申し訳ありませんが、Javaのデフォルトライブラリでは(現時点で)それ以上のことはできません。あなたはin this JDK bugreportと読むことができるので、興味があります。 これまでに何も行われていません。

より大きなバージョンを実際に使用したい場合は、OSに応じたネイティブコールを使用してそれらを取得するか、ローカルのアプリケーションリソースとして手動で保存する必要があります。

注意:ShellFolderにアクセスする際に問題が発生した場合は、this questionとお読みください。

+0

したがって、画像の高解像度バージョンを取得するのと同じではありません。メソッド 'getIcon'はパラメータが大きければ大きな画像を返しますパラメータがfalseの場合はtrue、小さい画像の場合は? getIcon(true); '最高の解像度で画像を返しますか? –

+0

正確に。そして、それはあなたが得ることができる最高です。 – ArcticLord

+0

これまでのところ解像度は確実に向上しています。ほんとありがと。 –

0

私はこの方法を使用:

protected ImageIcon getImageIcon() { 
    File f = new File((iconPath!=null)?iconPath:""); 
    if (!f.isFile() || !f.canRead()) { 
     iconPath = Constants.getDefaultPreviewIconPath(); 
    } 
    ImageIcon icon = new ImageIcon(iconPath, titolo); 
    return new ImageIcon(Utils.getScaledImage(
      icon.getImage(), 
      Constants.getICON_WIDTH(), 
      Constants.getICON_HEIGTH())); 
} 

getScaledImageがどこにあるか:

public static Image getScaledImage(Image srcImg, int w, int h) { 
     BufferedImage resizedImg = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB); 
     Graphics2D g2 = resizedImg.createGraphics(); 
     g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR); 
     g2.drawImage(srcImg, 0, 0, w, h, null); 
     g2.dispose(); 
     return resizedImg; 
    } 
+0

"titolo"とは –

+0

16×16画像の拡大 – VGR

+0

"titolo"は説明として使用される文字列であり、 "iconPath"と同じです。 – aurox

関連する問題