Внешний вид растрового изображения выглядит неудовлетворительно, сглаживание не работает, в Android

#android #bitmap #dithering

#Android #растровое изображение #сглаживание

Вопрос:

Я хочу использовать coverflow view в своем приложении. Чтобы получить часть изображения отражения, я использовал следующий код — http://www.androidsnippets.com/create-image-with-reflection

Я видел много форумов / обсуждений о сглаживании и tileMode, я перепробовал все, что обсуждалось, но у меня ничего не работает.

К вашему СВЕДЕНИЮ — я создаю растровое изображение динамически, не используя какое-либо растровое изображение в макетах. И я прикрепил изображение, чтобы показать, насколько оно плохое:

Внешний вид изображения отражения выглядит неудовлетворительно

Ниже я перечислил, что я пытался решить эту проблему.

    1. getWindow().setFlags(WindowManager.LayoutParams.FLAG_DITHER, WindowManager.LayoutParams.FLAG_DITHER);

   2. getWindow().setFormat(PixelFormat.RGBA_8888);


   3. BitmapDrawable baseImageDawable = new BitmapDrawable(getResources().openRawResource(imageId));
      baseImageDawable.setDither(true);
      baseImageDawable.setTileModeXY(Shader.TileMode.REPEAT, Shader.TileMode.REPEAT);

      Bitmap originalImage = baseImageDawable.getBitmap();
      int width = originalImage.getWidth();
      int height = originalImage.getHeight();

      Bitmap reflectionImage = Bitmap.createBitmap(originalImage, 0, 0, width, height, matrix, true);   
  

Но все равно изображение отражения очень уродливое.

Как я могу это решить?

Ответ №1:

Хммм. Я «думаю», что ваша проблема в том, что ваше растровое изображение не создается как ARGB_8888 (несмотря на ваш вызов SetFormat). Я бы «предложил» вместо создания растрового изображения, которое можно отрисовывать с помощью openRawResource, использовать BitmapFactory и обязательно указать Bitmap.Config .ARGB_8888. Затем создайте свой рисунок из растрового изображения. Просто мысль — трудно угадать на таком расстоянии, не имея возможности работать с eclipse. Возможно, эта статья покажется вам интересной:http://www.curious-creature.org/2010/12/08/bitmap-quality-banding-and-dithering

Редактировать: Итак, проблема, по-видимому, заключалась в вызове CreateBitmap, который использовался для выделения reflectionImage. Мораль истории (ИМХО): никогда не используйте методы CreateBitmap, которые не позволяют вам явно указывать Bitmap.Config. В противном случае, как сказал бы Форрест Гамп, вы никогда не знаете, что получите.

Комментарии:

1. Привет, Джордж, спасибо за твой ответ, я знаю, что хочу установить конфигурацию как ARGA_8888, но это не работает, дело в том, что я должен знать место, где именно я должен установить конфигурацию. Я попробовал следующее -BitmapFactory. Параметры options = новый BitmapFactory. Options(); параметры. inPreferredConfig = Bitmap.Config. ARGB_8888; тогда также это не работает.

Ответ №2:

Я нашел место, где я должен установить конфигурацию. При создании растрового изображения отражения установите конфигурацию как ARGB_8888. Теперь он работает.