2011-12-20 3 views
2

Я загружаю JPG-изображение в качестве байта [], но растровые полосы EXIF ​​перед преобразованием в байт []. Как загрузить исходный jpg без преобразования его в Bitmap?Android: Загрузить изображение в формате JPG без потери EXIF ​​

File imagefile = new File(filepath + "DSC00021.jpg"); 
FileInputStream fis = new FileInputStream(imagefile); 
Bitmap bi = BitmapFactory.decodeStream(fis); // EXIF info lost 
ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
bi.compress(Bitmap.CompressFormat.JPG, 100, baos); 
byte[] data = baos.toByteArray(); 

p.s. Я не хочу использовать стороннюю библиотеку. ExifInterface может записывать только файлы в файлы, а не потоки/байтовые массивы.

+2

Почему вы не читаете содержимое всего файла из массива FileInputStream в байтовый массив, а не конвертируете его в объект Bitmap? Googling даст вам массу результатов, как получить содержимое файла в массив байтов. –

ответ

0

Преобразовать файл в растровом по

Bitmap bi = BitmapFactory.decode(filepath + "DSC00021.jpg"); 

Вы можете задать параметры тоже посмотреть на API documentation

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

sample code поможет вам в правильном направлении.

+0

Я упомянул, что я не хочу делать это с сторонними библиотеками. – Taranfx

0

Выше код не будет работать в большинстве случаев. Если вы хотите декодировать изображение большого размера, вы получите ошибку «вне памяти». Декодирование с использованием параметров bitmpafactory.

Смежные вопросы