Получить изображение из буфера обмена на Mac OSX с помощью апплета - PullRequest
1 голос
/ 25 февраля 2012

Я использую апплет для сохранения изображения из буфера обмена. Изображение сохранено, но что-то случилось с его форматом. Это темные и потерянные цвета.

вот как я это делаю:

AccessController.doPrivileged(new PrivilegedAction() {
    public Object run() {

        try {
            //create clipboard object
            Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
            //Get data from clipboard and assign it to an image.
            //clipboard.getData() returns an object, so we need to cast it to a BufferdImage.
            BufferedImage image = (BufferedImage) clipboard.getData(DataFlavor.imageFlavor);
            //file that we'll save to disk.
            File file = new File("/tmp/clipboard.jpg");
            //class to write image to disk.  You specify the image to be saved, its type,
            // and then the file in which to write the image data.
            ImageIO.write(image, "jpg", file);
            //getData throws this.
        } catch (UnsupportedFlavorException ufe) {
            ufe.printStackTrace();
            return "Não tem imagem na área de transferência";
        } catch (Exception ioe){
            ioe.printStackTrace();
        }
        return null;
    }
}

);

Я прочитал, что Mac использует другой формат изображения, но я не нашел, как преобразовать его в формат, который я мог бы сохранить. Я подумал, что Ява должен был позаботиться об этом.

Итак, как мне конвертировать изображение из буфера обмена в jpg?

PS. Я попытался использовать PNG вместо JPG, получил худший результат: черное изображение

Ответы [ 2 ]

0 голосов
/ 29 февраля 2012

Для решения проблемы на Mac я использовал решение, предложенное на Кошмары получения изображений из буфера обмена Mac OS X с использованием Java .

Я передаю полученный BufferedImage методу, который перерисовывает его в новый BufferedImage, возвращая действительное изображение. Ниже следует код с этой страницы:

public static BufferedImage getBufferedImage(Image img) {
        if (img == null) return null;
        int w = img.getWidth(null);
        int h = img.getHeight(null);
        // draw original image to thumbnail image object and
        // scale it to the new size on-the-fly
        BufferedImage bufimg = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);
        Graphics2D g2 = bufimg.createGraphics();
        g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
        g2.drawImage(img, 0, 0, w, h, null);
        g2.dispose();
        return bufimg;
    }

И как я это использую:

Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
//Get data from clipboard and assign it to an image.
//clipboard.getData() returns an object, so we need to cast it to a BufferdImage.
BufferedImage image = (BufferedImage) clipboard.getData(DataFlavor.imageFlavor);

if (isMac()) {
    image = getBufferedImage(image);
}
0 голосов
/ 25 февраля 2012

PNG является предпочтительным форматом изображения для Mac. Возможно, вы захотите попробовать сохранить как это, а затем преобразовать в JPG, если это потребуется, впоследствии.

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