Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.80
verylazy
Заблокирован
#1

Bitmap & BitmapFactory - Android

08.08.2013, 15:37. Просмотров 1331. Ответов 10
Метки нет (Все метки)

Вопрос к бывалым.

У меня в метод передается параметр Byte[] data и дальше я из этого массива байт пытаюсь сделать битмап
Java
1
bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
все чудесно работает, но(!) эта строка отрабатывает на эмуляторе почти 1 секунду
массив длиной меньше 25000, замеряю время через System.nanoTime()
я через каждую строку расставил счетчики и ошибка, мне кажется, исключена - именно эта строка вносит почти секундную задержку
остальные строки пролетают быстро

это вообще нормально, кто-то сталкивался с похожим?

дальше там еще хуже, я этот битмап пытаюсь повернуть на 90 градусов с помощью класса Maxtix, там вообще процесс идет 2 с хвостиком секунды
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
GiGaBiTe911
24 / 24 / 1
Регистрация: 04.02.2013
Сообщений: 132
Записей в блоге: 1
08.08.2013, 15:49     Bitmap & BitmapFactory #2
да, у меня примерно так же. точное время не замерял, но достаточно долго.
verylazy
Заблокирован
08.08.2013, 15:55  [ТС]     Bitmap & BitmapFactory #3
о, уже статистика накапливается, спасибо
попробую переписать поворот не через класс Matrix, посмотрим что получится

Не по теме:

живо представляю mutagen, который грозно смотрит и качая головой говорит - ох школота...со своими оптимизациями

mechlech
08.08.2013, 16:13
  #4

Не по теме:

Цитата Сообщение от verylazy Посмотреть сообщение
mutagen, который грозно смотрит и качая головой говорит - ох школота
"Не сотвори себе кумира"

verylazy
Заблокирован
08.08.2013, 18:00  [ТС]     Bitmap & BitmapFactory #5
почитал, ничего толкового не нашел, все пользуются этими классами

вдруг кому пригодится - на одном ресурсе увидел что рекомендуют ставить
Java
1
Thread.currentThread().setPriority(Thread.MAX_PRIORITY);
попробовал, метод ускорился в 5-6 раз, мне понравилось, но чувствую что использовать нужно без фанатизма, только в экстренных случаях
GiGaBiTe911
24 / 24 / 1
Регистрация: 04.02.2013
Сообщений: 132
Записей в блоге: 1
08.08.2013, 18:41     Bitmap & BitmapFactory #6
Цитата Сообщение от verylazy Посмотреть сообщение
но чувствую что использовать нужно без фанатизма, только в экстренных случаях
ну понятное дело )) этим ты выставляешь своему процессу максимальный приоритет и он забирает на себя максимально доступное процессорное время, тем самым "ущемляя" другие процессы. и мне кажеЦа что после завершения своих "магических" действий с битмапом нужно не забыть обратно выставить нормальный приоритет сейчас попробую у себя.
YAUHEN
146 / 128 / 6
Регистрация: 29.07.2008
Сообщений: 506
08.08.2013, 19:13     Bitmap & BitmapFactory #7
Во первых:
тестируйте на реальном устройстве а не на эмуляторе.
если нету девайса - тестируйте на вменяемом эмуляторе (я использую genymotion)

Во вторых:
длинные операции стоит выносить в отдельные потоки (выставление приоритетов делать не стоит так это не приоритетная задача)

В третьих:
откуда у вас берутся эти байтаррэи? вы храните битмапы базе данных?
verylazy
Заблокирован
08.08.2013, 21:15  [ТС]     Bitmap & BitmapFactory #8
Цитата Сообщение от YAUHEN Посмотреть сообщение
Во первых:
тестируйте на реальном устройстве а не на эмуляторе.
если нету девайса - тестируйте на вменяемом эмуляторе (я использую genymotion)

Во вторых:
длинные операции стоит выносить в отдельные потоки (выставление приоритетов делать не стоит так это не приоритетная задача)

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

насчет длинных операций я понимаю
эти байт массивы это то, что прилетает в onTakePicture
Я вникаю во все это, пробую, вот подумал что было бы неплохо вынести обработку снимков с камеры и добавление их на экран и виде маленьких превьюшек в отдельный поток.
Для этого наследовался от класса AsyncTask и разнес код по двум методам - doInBackground и onPostExecute
В первом и происходит возня с этими массивами, а во втором я уже добавляю на экран готовый ImageView.
Приоритет потоку добавлял уже в самом конце метода doInBackground , когда осталось только сделать bitmap и повернуть его (если требовалось).
Надеюсь все правильно делаю.
YAUHEN
146 / 128 / 6
Регистрация: 29.07.2008
Сообщений: 506
09.08.2013, 12:08     Bitmap & BitmapFactory #9
я могу ошибаться но если вы сохранили картинку её потом можно как тамбнейл вытянуть

Добавлено через 47 минут
вот
verylazy
Заблокирован
09.08.2013, 16:00  [ТС]     Bitmap & BitmapFactory #10
код, который ниже выдает результат, который не совсем понятен для меня
это самое начало метода onPictureTaken
Java
1
2
3
4
5
6
            System.out.println("--1 " + data.length);
            bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
            System.out.println("--2 ");
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            bitmap.compress(CompressFormat.JPEG, 100,  baos);
            System.out.println("--3 " + baos.size());
я попытался слегка упаковать картинку, но data.length выдает 25525
а размер массива baos получается уже 33005, то есть больше, чем оригинал

не совсем корректно сравнивать теплое и мягкое, но я не могу понять как все таки паковать картинку с разным качеством jpg?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.08.2013, 17:44     Bitmap & BitmapFactory
Еще ссылки по теме:

BitmapFactory не может обработать большое изображение с камеры Android
Android Очистка памяти Bitmap
Android Сохранение Bitmap в галерею
RelativeLayout и Bitmap Android
BitmapFactory.decodeFile всегда возвращает null Android

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
YAUHEN
146 / 128 / 6
Регистрация: 29.07.2008
Сообщений: 506
09.08.2013, 17:44     Bitmap & BitmapFactory #11
так вы упакавали картинку просто в JPG без потери качества. не факт что она должна была быть меньше. попробуте поставить 50 в методе compress
Yandex
Объявления
09.08.2013, 17:44     Bitmap & BitmapFactory
Ответ Создать тему
Опции темы

Текущее время: 12:20. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru