2015-07-20 1 views
4

Я создал приложение, в котором некоторые пользователи (админы) могут войти в учетную запись администратора на моей веб-странице и изменить какой-либо контент, например фоновое изображение в приложении. В качестве конца я использую Parse.com, и приложение загружает фоновое изображение оттуда. Я использую Picasso для загрузки фоновых изображений в приложении. В некоторых деятельностях я хочу фон стираться, поэтому я использую this Transformation Размытия и загрузить изображение со следующим кодом:Android-приложения для некоторых пользователей при применении преобразования с Picasso

int apiVersion = android.os.Build.VERSION.SDK_INT; 
     if(apiVersion >= android.os.Build.VERSION_CODES.JELLY_BEAN_MR1) { 
      // Blur the image 
      final BlurTransformation blurTransformation = new BlurTransformation(this, 20); 
      // Load the background image with blur 
      Picasso.with(this) 
        .load(backgroundPictureURL) 
        .transform(blurTransformation) 
        .into(backgroundView); 
     } else { 
      // Load the background image without blur 
      Picasso.with(this) 
        .load(backgroundPictureURL) 
        .into(backgroundView); 
     } 

Я включил отчеты о сбоях, синтаксический анализ и теперь я получаю сообщение о том, что приложение пытается сбой для некоторых пользователей при попытке применить преобразование размытия. Это трассировка стеки, что я получаю:

java.lang.RuntimeException: Transformation blurred crashed with exception. 
com.squareup.picasso.BitmapHunter$3.run           BitmapHunter.java:434 
android.os.Handler.handleCallback            Handler.java:739 
android.os.Handler.dispatchMessage            Handler.java:95 
android.os.Looper.loop               Looper.java:135 
android.app.ActivityThread.main             ActivityThread.java:5254 
java.lang.reflect.Method.invoke             Native Method 
java.lang.reflect.Method.invoke             Method.java:372 
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run      ZygoteInit.java:898 
com.android.internal.os.ZygoteInit.main           ZygoteInit.java:693 
Caused by: android.renderscript.RSIllegalArgumentException: Bitmap has an unsupported format for this operation 
android.renderscript.Allocation.validateBitmapFormat       Allocation.java:537 
android.renderscript.Allocation.copyTo           Allocation.java:1257 
se.myapplication.main.CustomUI.BlurTransformation.transform      BlurTransformation.java:60 
com.squareup.picasso.BitmapHunter.applyCustomTransformations     BitmapHunter.java:429 
com.squareup.picasso.BitmapHunter.hunt           BitmapHunter.java:238 
com.squareup.picasso.BitmapHunter.run           BitmapHunter.java:159 
java.util.concurrent.Executors$RunnableAdapter.call        Executors.java:422 
java.util.concurrent.FutureTask.run            FutureTask.java:237 
java.util.concurrent.ThreadPoolExecutor.runWorker        ThreadPoolExecutor.java:1112 
java.util.concurrent.ThreadPoolExecutor$Worker.run        ThreadPoolExecutor.java:587 
java.lang.Thread.run               Thread.java:818 
com.squareup.picasso.Utils$PicassoThread.run         Utils.java:411 

Строка коды в классе Transformation Размытия, что трассировка стеки имеет в виде эта линия:

output.copyTo(blurredBitmap); 

Формат изображения либо JPG или png, и когда вы пытаетесь на моем телефоне и на эмуляторе, проблем нет, поэтому для некоторых пользователей может возникнуть сбой, и у них, похоже, есть Android 5.0.1 и 5.0.2 (как и я, и для меня нет проблем).

Я никуда не увлекаюсь этим, поэтому любая помощь приветствуется! Что может быть причиной проблемы и как я могу ее решить?

+0

Если это какая-либо помощь, код, который генерирует это исключение, находится здесь: https://android.googlesource.com/platform/frameworks/base/+/master/rs/java/android/renderscript/Allocation.java – njzk2

+0

Я бы сказал, что 'BlurTransformation.transform' создает растровое изображение, которое не нравится renderscript. Можете ли вы опубликовать код для этого? – njzk2

+0

В частности, как вы создаете 'blurredBitmap' – njzk2

ответ

0

Нашли решение на шагах 5 и 6 в this post от Marcin Koziński!

+0

Если это решило вашу проблему, пожалуйста, пометьте как принято (проверьте кнопку v, ниже идентификатора ответа) – Bonatti

+0

Не могу до завтра, тогда я буду! – jahed

0

Из протокола ошибок:

Caused by: android.renderscript.RSIllegalArgumentException: Bitmap has an unsupported format for this operation

Они используют растровые изображения. Хотя обычно вы можете проверить метаданные перед тем, как применить операцию, большинство служб не просто фильтруют по имени файла (например, * .img, * .jpg, * .png).

Я был в проекте, где иногда файл создавался в некотором роде, а затем повторно отображался как bmp, чтобы увеличить их «качество». Хотя изображения были закодированы в BMP, они были сохранены как .jpg имена. Насколько я могу судить, это кажется распространенным, особенно на изображениях, взятых из Интернета (несоответствие между именами и содержанием)

+0

Как получилось, что он почти всегда работает с изображениями jpg и png? – jahed

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