Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Image from Clipboard из MS Word розового цвета / 3 сообщений из 3, страница 1 из 1
24.06.2013, 08:43:12
    #38307788
OldBoyOdeSu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Image from Clipboard из MS Word розового цвета
всем привет, на Jave программирую редко. Java 1.6
Задача в следующем, рисунок из буфера обмена сохранить в файл на диске в формате JPEG. Код накидал, работает, но возникает проблема
если в MS Word выделить картинку в документе и послать её в буфер, то файл на выходе получается розового цвета, и заголовок у него, если в hex смотреть
не содержит JFIF и некоторые программы его просто не могут открыть.

вот код
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
    public static void saveImageFailure()throws Exception{
        Clipboard clip = Toolkit.getDefaultToolkit().getSystemClipboard();
        Transferable contents = clip.getContents(null);
        if(contents.isDataFlavorSupported(DataFlavor.imageFlavor)){
            BufferedImage image = (BufferedImage)contents.getTransferData(DataFlavor.imageFlavor);
            ImageIO.write(image, "JPG", new File("C:\\tmp101.jpg"));        
        }
    }


потом я переписал его следующим образом: сохранить в PNG потом опять прочитать и сохранить в JPG, мне не нравится промежуточное сохранение в формате PNG, наверняка можно как то в памяти изменить
BufferedImage и сразу сохранить в JPG, может кто подскажет как лучше обработать картинку в памяти в этом случае
или это нормальное решение?
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
    public static void saveImage()throws Exception{
        Clipboard clip = Toolkit.getDefaultToolkit().getSystemClipboard();
        Transferable contents = clip.getContents(null);
        if(contents.isDataFlavorSupported(DataFlavor.imageFlavor)){
            BufferedImage image = (BufferedImage)contents.getTransferData(DataFlavor.imageFlavor);
            //save in PNG
            File f = new File("C:\\tmp100.png");
            ImageIO.write(image, "PNG", f);
            //read
            Image img = ImageIO.read(f);
            BufferedImage bufferedImage = new BufferedImage(img.getWidth(null), img.getHeight(null), BufferedImage.TYPE_INT_RGB);  
            Graphics2D g = bufferedImage.createGraphics();  
            g.drawImage(img, null, null);  
            //write in JPG
            ImageIO.write(bufferedImage, "JPG", new File("C:\\tmp101.jpg"));
            f.delete();            
        }
    }
...
Рейтинг: 0 / 0
24.06.2013, 11:17:55
    #38307961
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Image from Clipboard из MS Word розового цвета
Похоже на вот это
http://stackoverflow.com/a/2408779
http://stackoverflow.com/a/4727305
Дело либо в цветовой схеме, либо в прозрачности, которой у JPEG нет.
image.getType() что говорит?
...
Рейтинг: 0 / 0
24.06.2013, 11:45:23
    #38307997
OldBoyOdeSu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Image from Clipboard из MS Word розового цвета
Blazkowicz,

image.getType() -> TYPE_4BYTE_ABGR

спасибо, вторая ссылка натолкнула на мысль как не писать в PNG, сделал как
Код: java
1.
2.
3.
4.
5.
6.
7.
        if(contents.isDataFlavorSupported(DataFlavor.imageFlavor)){
            BufferedImage image = (BufferedImage)contents.getTransferData(DataFlavor.imageFlavor);
            BufferedImage bi = new BufferedImage(image.getWidth(null), image.getHeight(null), BufferedImage.TYPE_INT_RGB);
            Graphics g = bi.getGraphics();
            g.drawImage(image, 0, 0, null);
            ImageIO.write(bi, "JPG", new File("C:\\tmp105.jpg"));
        }


вроде работает корректно
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Image from Clipboard из MS Word розового цвета / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]