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;
}

我尝试了很多来自网络的搜索结果,但仍然不知道为什么。我认为问题也可能来自另一个来源:资源位图本身。它是一个 32 位的 png 文件,大小为 65*161,大小为 1.59KB,不是很大。所以我得到另一个png并用相同的方法绘制,没有任何问题!所以这里也给出了这两个png的链接,供大家找出问题的症结所在。感谢战利品!

================导致问题的png VS没有问题的png =============

4

0 回答 0