1

アプリで coverflow ビューを使用したいと考えています。反射画像部分を取得するために、次のコードを使用しました - 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);   

しかし、それでも反射画像は非常に醜いです。

どうすればこれを解決できますか?

4

2 に答える 2

4

うーん。あなたの問題は、ビットマップが ARGB_8888 として作成されていないことだと思います (setFormat 呼び出しにもかかわらず)。openRawResource を使用して Bitmap ドローアブルを作成する代わりに、BitmapFactory を使用して Bitmap.Config.ARGB_8888 を指定することを「お勧めします」。次に、ビットマップからドローアブルを作成します。考えただけで、日食に足を踏み入れることができずにこの距離を推測するのは難しい. この記事は興味深いかもしれません: http://www.curious-creature.org/2010/12/08/bitmap-quality-banding-and-dithering/

編集:したがって、問題は、reflectionImage の割り当てに使用されている createBitmap の呼び出しにあったようです。話の教訓 (IMHO): Bitmap.Config を明示的に指定できない createBitmap メソッドを使用しないでください。そうしないと、フォレスト・ガンプが言うように、何が手に入るかわからない.

于 2011-05-16T04:36:25.677 に答える
1

構成を設定する場所を見つけました。リフレクション ビットマップの作成中に、構成を ARGB_8888 に設定します。その作業は今。

于 2011-05-17T10:42:49.817 に答える