我使用此方法从资源获取位图,并使用从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 =============