我使用此方法从资源中获取位图,并在从 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的链接,供大家找出问题的症结所在。感谢战利品!