Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> FileInputStream to BufferedImage, Запись из FileInputStream в BufferedImag 
V
    Опции темы
newinjava
Дата 9.5.2011, 11:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


ATokS
*


Профиль
Группа: Участник
Сообщений: 64
Регистрация: 30.8.2009

Репутация: нет
Всего: нет



Здраствуйте.

У меня есть файл в котором лежат друг за другом несколько JPG картинок, их место нахождение т.е. Offset(ы) мне известны.
Мне нужно как-то вытянуть с помощью  FileInputStream эти картинки в BufferedImage.
На данный момент я делаю так: создаю FileOutputStream, сохраняю в отдельный файлы те картинки что находятся в исходном файле, а затем уже с помощью ImageIO.read создаю BufferedImage. Но вот проблемма в том что я не хочу создавать файлы, мне надо чтобы весь процес преоброзования прошел в памяти!

Как это реализовать?
PM WWW   Вверх
newinjava
Дата 9.5.2011, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


ATokS
*


Профиль
Группа: Участник
Сообщений: 64
Регистрация: 30.8.2009

Репутация: нет
Всего: нет



Всё уже помогли!

Код

            FileInputStream fis = new FileInputStream(this.file);
            fis.skip(start);
            
            byte[] byteArray = new byte[length];
            fis.read(byteArray);
            
            ByteArrayInputStream bais = new ByteArrayInputStream(byteArray);
            
            fis.close();
            bais.close();
            return ImageIO.read(bais);

PM WWW   Вверх
AlexeyVorotnikov
Дата 10.5.2011, 10:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 658
Регистрация: 18.6.2007
Где: Москва

Репутация: 10
Всего: 18



А почему нельзя так:
Код

            FileInputStream fis = new FileInputStream(this.file);
            fis.skip(start);
            return ImageIO.read(fis);



--------------------
RTFM!
Три источника и три составные части Java: The Java Language Specification, Java Platform API Specification, The Java Virtual Machine Specification
PM MAIL   Вверх
newinjava
Дата 12.5.2011, 12:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


ATokS
*


Профиль
Группа: Участник
Сообщений: 64
Регистрация: 30.8.2009

Репутация: нет
Всего: нет



Цитата(AlexeyVorotnikov @  10.5.2011,  10:05 Найти цитируемый пост)
А почему нельзя так:


А потомучто будит лишок прихвачен.

Допустим файл состоит из 3 картинок, каждая по 10 Байт!  smile 

Картинка 1: 
Offset: 0
Lenght: 10

Картинка 2: 
Offset: 10
Lenght: 20

Картинка 3: 
Offset: 20
Lenght: 30

Мне нужно только вторую. Т.Е. Я прыгаю к Offset: 10 fis.skip(10); 
И если я потом сразу сделаю return ImageIO.read(fis); то и третья картинка будит возвращаться. А мне надо только одну.

По этому, то что с byteArray, идеально подходит к моей задаче. 
PM WWW   Вверх
AlexeyVorotnikov
Дата 12.5.2011, 12:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 658
Регистрация: 18.6.2007
Где: Москва

Репутация: 10
Всего: 18



Цитата(newinjava @  12.5.2011,  13:04 Найти цитируемый пост)
И если я потом сразу сделаю return ImageIO.read(fis); то и третья картинка будит возвращаться. А мне надо только одну

А вот отсюда поподробнее, пожалуйста. Метод  ImageIO.read возвращает один имидж. Как и почему будет прочитан ещё один?

PS. Если у меня сегодня будет немножко времени, поэкспериментирую.


--------------------
RTFM!
Три источника и три составные части Java: The Java Language Specification, Java Platform API Specification, The Java Virtual Machine Specification
PM MAIL   Вверх
newinjava
Дата 16.5.2011, 16:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


ATokS
*


Профиль
Группа: Участник
Сообщений: 64
Регистрация: 30.8.2009

Репутация: нет
Всего: нет



Цитата(AlexeyVorotnikov @  12.5.2011,  12:34 Найти цитируемый пост)
А вот отсюда поподробнее


Ну дак после того как я прыгнул к оффсету 10 вызывается return ImageIO.read(fis); который читает всё начиная с оффсета 10 и до конца!

А мне надо только кусок от оффсета 10 до оффсета 20

Цитата(newinjava @  12.5.2011,  12:04 Найти цитируемый пост)
По этому, то что с byteArray, идеально подходит к моей задаче.  


PM WWW   Вверх
AlexeyVorotnikov
Дата 17.5.2011, 12:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 658
Регистрация: 18.6.2007
Где: Москва

Репутация: 10
Всего: 18



Да, попробовал я сам. Что-то ImageIO.read, то ли, действительно, читает поток до конца, то ли просто глючит. Не получается нормально прочитать несколько изображение последовательно. :(


--------------------
RTFM!
Три источника и три составные части Java: The Java Language Specification, Java Platform API Specification, The Java Virtual Machine Specification
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0679 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.