#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. Теперь он работает.