2016-11-16 5 views
0

.lnkファイルからアイコンを取得し、javafxイメージに入れて、.pngファイルとして保存しようとしています。.lnkファイルからjavafxイメージへのアイコン

私の現在のコードがコンパイルされますが動作しません:

import java.io.*; 
import java.util.*; 
import javax.swing.filechooser.FileSystemView; 
import javax.swing.Icon; 
import javax.swing.ImageIcon; 
import javafx.embed.swing.SwingFXUtils; 
import java.awt.image.BufferedImage; 
import java.awt.Graphics; 
import javafx.scene.image.Image; 
import javax.imageio.ImageIO; 
class Iconic { 
    public static void main(String[] args) throws IOException{ 
     File origin = new File("C:\\Users\\00001\\OneDrive.lnk"); 
     Icon icn = FileSystemView.getFileSystemView().getSystemIcon(origin); 
     ImageIcon ico = ((ImageIcon) icn); 
     BufferedImage bi = new BufferedImage(
      ico.getIconWidth(), 
      ico.getIconHeight(), 
      BufferedImage.TYPE_INT_RGB); 
     Graphics g = bi.createGraphics(); 
     ico.paintIcon(null,g,0,0); 
     g.dispose(); 
     Image img = SwingFXUtils.toFXImage(bi,null); 

     File output = new File("C:\\Users\\00001\\"); 
     BufferedImage bim = SwingFXUtils.fromFXImage(img,null); 
     ImageIO.write(bim,".png",output); 
    } 
} 
+0

「機能しません」。だから何が起こる?例外はありますか?その場合は、スタックトレースをポストします。そして、あなたは最後にディレクトリに画像を書き込もうとしているようです...? –

+0

現在、例外は発生しませんが、.lnkファイルのアイコンは.jpgとして保存されません –

答えて

0

あなたは、ほとんど存在し、しかし、あなたのコード内の2つの問題があります。両方ともImageIO.write(...)メソッドに関連しています。 ImageIO.write(RenderedImage, String, File)のAPIドキュメントから

Fileに指定された形式をサポートする任意ImageWriterを用いて画像を書き込み。すでにFileが存在する場合、その内容は破棄されます。

パラメータ:

im - 書き込まれるRenderedImage

formatName - Stringフォーマットの非公式な名前を含んでいます。

output - a Fileに書き込まれます。

  1. 2番目のパラメータは、形式名、ないファイルの拡張子です。したがって、2番目の引数は ".png"ではなく "PNG"でなければなりません。 ImageIOは ".png"形式のプラグインを見つけられないため、write(...)の呼び出しは単に黙ってfalseを返します。私はいつも戻り値ImageIO.write(...)をチェックすることを推奨します。

  2. 3番目のパラメータは、の宛先ファイルです。このファイルのパスはファイルを指している必要がありますが、ディレクトリはディレクトリだけを指しています。上の書式名のみを修正すると、IOExceptionになる可能性が最も高いことがわかります。

だから、あなたの文章コードの固定されたバージョンのような希望:

File output = new File(origin.getParentFile(), origin.getName().replace(".lnk", ".png")); 

if (!ImageIO.write(bi, "PNG", output)) { 
    System.err.println("Could not write icon"); 
} 

を私は意図的にFX Imageアウトからの変換を残しました。 biをFX Imageへの変換なしで直接書き込むことができるはずです(もちろん、FXで画像を操作しない限り)。

関連する問題