1

このメソッドを使用してリソースからビットマップを取得し、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 のリンクもここに示されています。ありがとうございます!

================問題のある png VS問題のない png =============

4

0 に答える 0