Как читать файл OS X * .icns с Java - PullRequest
       2

Как читать файл OS X * .icns с Java

3 голосов
/ 21 сентября 2010

Я хочу прочитать файлы * .icns в OS X в BufferedImage. Помощь

Ответы [ 2 ]

4 голосов
/ 07 августа 2011
2 голосов
/ 30 мая 2012

Сначала необходимо преобразовать ICNS в другой тип изображения, а после загрузки этого изображения вы можете удалить его.Вот как конвертировать PNG в ICNS, поэтому вам просто нужно сделать наоборот:

public static void Png(File png, File icns) throws IOException{
    ImageIcon image = new ImageIcon(ImageIO.read(png));
    ImageIconAs(image, icns);
}

public static void ImageIconAs(ImageIcon ii, File icns) throws IOException{IconAs((Icon)ii,icns);}

public static void IconAs(Icon icon, File icns) throws IOException{
        if (icon != null) {
                BufferedImage bi = new BufferedImage(icon.getIconWidth(), icon.getIconHeight(), BufferedImage.TYPE_INT_ARGB );
                Graphics2D g = bi.createGraphics();
                icon.paintIcon(new Canvas(), g, 0, 0 );
                g.dispose();
                File outputfile = new File("temp000.png");
                ImageIO.write(bi, "png", outputfile);
                execTerminal(new String[]{ "sips", "-s", "format", "tiff", 
                        "temp000.png","--out", "temp000.tiff" });  
                File apaga2 = new File("temp000.png");
                apaga2.delete();
                execTerminal(new String[]{ "tiff2icns", "-noLarge", 
                        "temp000.tiff", icns.getAbsolutePath()});
                File apaga = new File("temp000.tiff");
                apaga.delete();
        }
    }

static void execTerminal(String[] cmd){
        int exitCode = 0;
        try {
            exitCode = Runtime.getRuntime().exec(cmd).waitFor();
        } 
        catch (InterruptedException e) {e.printStackTrace();}
        catch (IOException e) {
            if (exitCode != 0) System.out.println("ln signaled an error with exit code " + exitCode);
        }
    }

Вам просто нужно использовать это для вызова действия:

Png (png_fileicns_file);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...