Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Альтернатива ImageIO для сохранения рисунков


Автор: v2v 11.7.2007, 17:24
Здраствуйте. Никак не могу найти способ как сохранить рисунок в файл.
Есть класс ImageIO, который замечательно справляется с этой задачей (и читает с файлов и пишет в них), но есть одно НО: необходимо что - бы прога работала на более ранней версии явы (1.3) , а этого класса в ней нету. 
Я нашёл как прочитать рисунок из файла: 
Код

Image image = Toolkit.getDefaultToolkit().getImage(picture_name);

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

Автор: AlexeyVorotnikov 11.7.2007, 17:57
Цитата(v2v @  11.7.2007,  18:24 Найти цитируемый пост)
а вот аналогичной функции, которая бы сохраняла в файл ну никак не могу найти, хотя она должна существовать!

А вот нету :(

Автор: v2v 11.7.2007, 18:26
Не может быть!
А как до этого производилась работа с файлами - рисунками ?

Автор: powerOn 11.7.2007, 21:23
А может стороннюю либу подключить и ей воспользоваться? Вот и http://schmidt.devlib.org/java/pixel-image-io-libraries.html  библиотек имеется...

Автор: v2v 12.7.2007, 08:38
нет, это не выход

Автор: batigoal 12.7.2007, 08:39
Где-то я видел пример попиксельной записи...

Автор: v2v 12.7.2007, 09:05
оно будет зависеть от типа изображения (jpeg, png) ?

Автор: batigoal 12.7.2007, 09:12
Цитата(v2v @  12.7.2007,  10:05 Найти цитируемый пост)
оно будет зависеть от типа изображения (jpeg, png) ? 

Виденный мной пример вообще был про BMP.

Автор: v2v 12.7.2007, 09:24
Да я уже нашё такие примеры и для других форматов. Только мне оно не подходит. 

Автор: powerOn 12.7.2007, 09:40
Цитата(v2v @  12.7.2007,  09:38 Найти цитируемый пост)
нет, это не выход 

почему, если не секрет?

Автор: LSD 12.7.2007, 11:59
v2v, ты уж определись. Сторонние либы ты использовать не хочешь, самому писать код тоже. По твоему функция сохранения рисунка сама возникнуть должна?

Автор: v2v 12.7.2007, 12:46
Есть такая штука называется Lotus, для создание систем электронного документооборота.
Там можно писать скрипты на Java. Вот мне нужно туда написать такой скрипт с рисунками...
Ява СДК и Виртуальная машина уже вмонтированы в Lotus и никакие сторонние библиотеки подключать нельзя.
да так вот вмонтировано sdk 1.3 что и не радует ((.

Автор: LSD 12.7.2007, 13:31
А скрипты ты туда в исходниках загружаешь, или уже скомпилированные?

Автор: v2v 12.7.2007, 13:52
исходники.

Добавлено через 10 секунд
компиляция там происходит.

Автор: LSD 12.7.2007, 14:15
А если взять http://jmge.net/java/gifenc/src/net/jmge/gif/Gif89Encoder.java с исходниками и засунуть его туда?

Автор: v2v 12.7.2007, 14:36
один класс - это ещё куда не шло, но разве представленый пример позволяет сохранять в формате jpg  ?

Автор: LSD 12.7.2007, 15:48
Для jpeg создай другой класс.

Автор: v2v 13.7.2007, 22:49
Цитата(AlexeyVorotnikov)
А вот нету :(

А вот и есть!
Цитата(LSD @  12.7.2007,  11:59 Найти цитируемый пост)
По твоему функция сохранения рисунка сама возникнуть должна? 

ну это же стандарт, очень нужная операция.. такая функиця ДОЛЖНА существовать!!!.....
дык.
Вобщем, я нашёл решение.  smile 
В одном из "не сильно" документированых пакетах com.sun.image.codec.jpeg имеется интерфейсJPEGImageEncoder, который и выполняет поставленную задачу!
Накатал функцию.... работает.. и работает нормально!!!!)
Код

        private void SaveImage(Image img,String path2save)
        {
                BufferedImage bimg = null;
                int w = img.getWidth(null);
                int h = img.getHeight(null);
                int [] pixels = new int[w * h];
                PixelGrabber pg = new PixelGrabber(img,0,0,w,h,pixels,0,w);
                try
                {
                        pg.grabPixels();        
                        bimg = new BufferedImage(w,h,BufferedImage.TYPE_INT_RGB);
                        bimg.setRGB(0,0,w,h,pixels,0,w);
                        FileOutputStream fos = new FileOutputStream(path2save);
                        JPEGImageEncoder jpeg = JPEGCodec.createJPEGEncoder(fos);
                        jpeg.encode(bimg);
                        fos.close();
                    }
                catch(Exception ie)
                {
                  ie.printStackTrace();
                }
        } 

юзайте наздоровье))

Добавлено @ 22:49
problem solved!
topic closed!

Автор: AlexeyVorotnikov 14.7.2007, 10:54
Цитата(v2v @  13.7.2007,  23:49 Найти цитируемый пост)
такая функиця ДОЛЖНА существовать!!!.....

Кому она должна?

Использование недокументированных классов чревато боком smile

Автор: LSD 14.7.2007, 21:48
Цитата(AlexeyVorotnikov @  14.7.2007,  11:54 Найти цитируемый пост)
Использование недокументированных классов чревато боком

В данном случае вполне нормальное решение, т.к. этот код пишется под конкретную версию JVM, которая не будет меняться со временем.

Автор: v2v 15.7.2007, 19:44
Цитата(LSD @ 14.7.2007,  21:48)
В данном случае вполне нормальное решение, т.к. этот код пишется под конкретную версию JVM, которая не будет меняться со временем.

не факт.
но покрайнемере я  проверил наличие такого же пакета в sdk 1.4.2.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)