AndroidアクティビティまたはOpenGlでバンド化された画像に対して可能な解決策は何ですか。
以下の答えを見てください。
それが役に立てば幸い
カラー バンディングが解決しました
カラー バンディングを 2 段階で解決しました
1) * BitmapFactory を使用してリソースをデコードすると、ARGB_8888 を使用する代わりに、カラー バンディングを示す RGB565 でリソースがデコードされるため、デコード オプションを ARGB_8888 に設定するために BitmapFactory.Options を使用しました。
2番目の問題は、ビットマップをスケーリングするたびに再びバンドができたことでした
2)これは難しい部分であり、多くの検索が必要で、最終的に機能しました*ビットマップをスケーリングするためのBitmap.createScaledBitmapメソッドも、スケーリング後に画像をRGB565形式に縮小しました。バンド画像を取得しました(これを解決するための古い方法は、少なくとも1つpng の透明なピクセルですが、jpg や bmp のような他の形式は機能しませんでした)そこで、CreateScaledBitmap メソッドを作成して、結果のスケール ビットマップで元のビットマップ構成を使用してビットマップをスケーリングしました (実際には、logicnet.dk による投稿からメソッドをコピーし、 Javaで翻訳)
BitmapFactory.Options myOptions = new BitmapFactory.Options();
myOptions.inDither = true;
myOptions.inScaled = false;
myOptions.inPreferredConfig = Bitmap.Config.ARGB_8888;//important
//myOptions.inDither = false;
myOptions.inPurgeable = true;
Bitmap tempImage =
BitmapFactory.decodeResource(getResources(),R.drawable.defaultart, myOptions);//important
//this is important part new scale method created by someone else
tempImage = CreateScaledBitmap(tempImage,300,300,false);
ImageView v = (ImageView)findViewById(R.id.imageView1);
v.setImageBitmap(tempImage);
// 関数
public static Bitmap CreateScaledBitmap(Bitmap src, int dstWidth, int dstHeight, boolean filter)
{
Matrix m = new Matrix();
m.setScale(dstWidth / (float)src.getWidth(), dstHeight / (float)src.getHeight());
Bitmap result = Bitmap.createBitmap(dstWidth, dstHeight, src.getConfig());
Canvas canvas = new Canvas(result);
//using (var canvas = new Canvas(result))
{
Paint paint = new Paint();
paint.setFilterBitmap(filter);
canvas.drawBitmap(src, m, paint);
}
return result;
}
私が間違っている場合は修正してください。それがあなたのために働いたかどうかもコメントしてください。
OpenGlの場合、上位関数を適用した後に作成されたビットマップをバインドするだけです