2015-10-06 3 views
0

я есть попытаться создать синий растрового изображения, но он будет генерировать ошибку некоторые делают скриптКак создать Размытие растрового изображения в Android

private Bitmap blurRenderScript(Bitmap smallBitmap, int radius) { 

    try {   smallBitmap = RGB565toARGB888(smallBitmap);   } catch (Exception e) {    e.printStackTrace();  } 

    Bitmap bitmap = Bitmap.createBitmap(smallBitmap.getWidth(), 
      smallBitmap.getHeight(), Bitmap.Config.ARGB_8888); 

    RenderScript renderScript = RenderScript.create(MainActivity.this); 

    Allocation blurInput = Allocation.createFromBitmap(renderScript, 
      smallBitmap);  Allocation blurOutput = Allocation.createFromBitmap(renderScript, 
      bitmap); 

    ScriptIntrinsicBlur blur = ScriptIntrinsicBlur.create(renderScript, 
      Element.U8_4(renderScript));  blur.setInput(blurInput);  blur.setRadius(radius); // radius must be 0 < r <= 25  blur.forEach(blurOutput); 

    blurOutput.copyTo(bitmap);  renderScript.destroy(); 

    return bitmap; 

} 

и вторая часть

private Bitmap RGB565toARGB888(Bitmap img) throws Exception {  int numPixels = img.getWidth() * img.getHeight();  int[] pixels = new int[numPixels]; 

    // Get JPEG pixels. Each int is the color values for one pixel.   img.getPixels(pixels, 0, img.getWidth(), 0, 0, img.getWidth(), 
      img.getHeight()); 

    // Create a Bitmap of the appropriate format.  Bitmap result = Bitmap.createBitmap(img.getWidth(), img.getHeight(), 
      Bitmap.Config.ARGB_8888); 

    // Set RGB pixels.  result.setPixels(pixels, 0, result.getWidth(), 0, 0, result.getWidth(), 
      result.getHeight());  return result; } 

когда я вызова метод blurRenderScript(bitmap, 20) он вызывает ошибку, подобную 10-06 11:40:33.547: E/RenderScript(13094): rsi_ScriptIntrinsicCreate 5 10-06 11:40:33.571: A/libc(13094): Fatal signal 11 (SIGSEGV) at 0x00000000 (code=128), thread 13107

+0

проверить эту удивительную библиотеку: [размыто] (https://github.com/wasabeef/Blurry) –

ответ

0

Для этого можно использовать некоторые сторонние инструменты. Blur изображение с Renderscript - Xamarin

Требования

enter code here 

Этот рецепт будет работать только с Android 4.2.2 (уровень 17 API) или выше.

Рецепт

Пользовательский интерфейс для этого рецепта содержится в следующем файле макета XML:

Это очень простой пользовательский интерфейс, который имеет ImageView и SeekBar. Мы раздуваем этот макет и подключаем обработчик событий к методу SeekBar в методе OnCreate нашей деятельности, как показано в следующем коде:

Когда пользователь перестает перемещать свой палец вдоль SeekBar, событие StopTrackingTouch будет запущено, а Вызывается метод BlurImageHandler. Содержимое этого обработчика может быть замечено в следующем фрагменте:

Если значение SeekBar имеет значение больше нуля, тогда нам нужно будет применить фильтр размытия. Если значение SeekBar равно нулю, то не требуется размытие. Код внутри DisplayBlurrImage можно посмотреть ниже:

Давайте быстро рассмотрим DisplayBlurrImage. Первое, что мы делаем, это отключить SeekBar и отобразить неопределенный диалог прогресса. Чтобы наше приложение реагировало и предотвращало сообщение ANR (приложение не отвечающее) от Android, фактическая фильтрация будет выполняться в отдельном потоке. В этом примере вызывается метод CreateBlurredImage через параллельную библиотеку задач. Задача, которую мы создали для выполнения этой работы, имеет продолжение, которое обновит пользовательский интерфейс с размытым изображением и отменит диалог прогресса. Это продолжение планируется запустить в потоке пользовательского интерфейса нашего приложения.

Последний фрагмент кода, который нам нужно изучить, будет выполнять фактическое размытие изображения. Код для этого содержится в методе CreateBlurrImage. Этот код имеет комментарии инлайн, чтобы помочь объяснить соответствующие части коды:

http://developer.xamarin.com/recipes/android/other_ux/drawing/blur_an_image_with_renderscript/

+2

вопрос не спрашивает для решения в ** xamarin ** –

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