使用ColorMatrix和ColorMatrixColorFilter更改位图颜色,从而导致Android中出现奇怪的结果

时间:2012-05-27 11:30:13

标签: android bitmap png colormatrix

我使用此方法从资源获取位图,并使用从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并使用相同的方法绘制,没有任何问题!所以这里还给出了这两个pngs的链接,供你找到问题的症结所在。谢谢你的支持!

================ The png causing problem VS The png without problem =============

0 个答案:

没有答案