Android: исключение, применяющее ColorMatrixColorFilter к объекту Paint, но только для определенных растровых изображений - PullRequest
2 голосов
/ 30 января 2012

Я новичок в программировании на Android, но я потратил много времени, чтобы придумать это, так что, надеюсь, кто-то знает, что происходит. В моем приложении есть куча объектов Thing, каждый из которых имеет растровое изображение, и каждый из них как-то меняет растровое изображение (меняет цвет, размер и т. Д.). Все это работало нормально с некоторыми «тестовыми» растровыми изображениями, которые я сделал в MS Paint (сохраненными в виде файлов .png). Однако, когда я заменил их на более красивые картинки, сделанные в GIMP, приложение начало падать.

В конце концов я понял, что приложение будет зависать только в том случае, если изображение в формате .png будет сохранено с опцией «Сохранить цвет фона» в GIMP. Мне это нужно, поскольку некоторые из этих изображений должны быть частично прозрачными, чтобы их можно было наложить. Однако: сумасшедшая вещь в том, что он не падает, когда я пытаюсь наложить или создавать изображение, а падает, когда я применяю ColorMatrixColorFilter к объекту Paint.

Я не понимаю, как это может быть. Он никогда не заходит достаточно далеко, чтобы фактически применить объект Paint к чему-либо, так почему один файл изображения будет работать, а другой - нет? Авария - это RuntimeException в ActivityThread.performLauncActivity, и я не смог больше узнать об этом.

Вот какой-то псевдокод того, что я делаю, и где он падает.

Вопросы: 1) Почему это сбой? 2) Что мне делать по-другому, если я хочу загружать прозрачные изображения и применять цветовые фильтры, накладывать их друг на друга для создания новых растровых изображений и т. Д.? Все это прекрасно работает, если у всех моих изображений нет фона.

* * 1010

Редактировать 1: Вот трассировка, если она полезна: DalvikVM [локальный: 8611]
Поток [<1> main] (Приостановлено (исключение RuntimeException))
Строка ActivityThread.performLaunchActivity (ActivityThread $ ActivityRecord, Intent): 2663
Строка ActivityThread.handleLaunchActivity (ActivityThread $ ActivityRecord, Intent): 2679
ActivityThread.access $ 2300 (ActivityThread, ActivityThread $ ActivityRecord, Intent) строка: 125 Строка ActivityThread $ H.handleMessage (Message): 2033
ActivityThread $ H (обработчик) .dispatchMessage (сообщение) строка: 99 Looper.loop () строка: 123 Строка ActivityThread.main (String []): 4627
Строка Method.invokeNative (Object, Object [], Class, Class [], Class, int, boolean): недоступно [собственный метод]
Строка Method.invoke (Object, Object ...): 521
ZygoteInit $ MethodAndArgsCaller.run () строка: 868
ZygoteInit.main (String []) строка: 626 NativeStart.main (String []) строка: недоступно [собственный метод]

Редактировать 2: Это произошло с использованием цели 2.2 (в частности, android-x86-2.2-eeepc, запущенного в VirtualBox). При запуске с целью 3.2, похоже, что есть проблемы с обработкой растровых изображений в других местах, но больше не выдается исключение RuntimeException. Так что может показаться, что это просто ошибка.

...