このメソッドを使用してリソースからビットマップを取得し、SurfaceView から拡張されたクラス内で Canvas.drawBitmap を使用して描画します。
private Bitmap getImage(Context context, int imageId) {
TypedValue value = new TypedValue();
context.getResources().openRawResource(imageId, value);
BitmapFactory.Options opts = new BitmapFactory.Options();
opts.inTargetDensity = value.density;
return BitmapFactory.decodeResource(context.getResources(), imageId,
opts);
}
このビットマップ自体は問題なく表示されます。しかし、次の方法を使用して色を変更し、この新しいビットマップを描画したい場合、画像全体の一部が常に失われます。
public static Bitmap changeColor(Bitmap bmpOriginal, float degree) {
Bitmap bmp = Bitmap.createBitmap(bmpOriginal.getWidth(),
bmpOriginal.getWidth(), Config.ARGB_8888);
// Set the two bitmaps with the same density.
//But it seems no use now
// try {
// bmp.setDensity(bmpOriginal.getDensity());
// } catch (Exception e) {
// // TODO: handle exception
// Log.v("ImageTools_changeColor", "" + e.toString());
// }
Canvas c = new Canvas(bmp);
Paint paint = new Paint();
ColorMatrix cm = new ColorMatrix();
cm.setRotate(0, degree);
ColorMatrixColorFilter f = new ColorMatrixColorFilter(cm);
paint.setColorFilter(f);
c.drawBitmap(bmpOriginal, 0, 0, paint);
return bmp;
}
Web から多くの検索結果を試しましたが、まだ理由がわかりません。問題は別のソース、つまりリソースビットマップ自体からも発生する可能性があると思います。これは 32 ビットの png ファイルで、サイズは 65*161 で、サイズは 1.59KB で、あまり大きくありません。だから私は別のpngを取得し、同じ方法で描画しますが、何も問題はありません! したがって、問題の核心を見つけるために、これら 2 つの png のリンクもここに示されています。ありがとうございます!