Растровое изображение не выглядит хорошо, дизеринг не работает, в Android - PullRequest
1 голос
/ 13 мая 2011

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

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

К вашему сведению - я создаю растровое изображение динамически, не используя растровое изображение в макетах.И я приложил изображение, чтобы показать, насколько это плохо:

Reflection image appearance is not looking good

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

   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);   

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

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

Ответы [ 2 ]

4 голосов
/ 16 мая 2011

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

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

1 голос
/ 17 мая 2011

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

...