调整位图大小

时间:2014-12-07 16:19:05

标签: java android bitmap

我正在开发一个Android项目。当我试图调整位图大小时,应用程序不幸停止了,并且在Logcat中发出消息"只有可变位图可以调整大小"。我试图将我的位图转换为可变位仍然是同样的问题。可能是解决方案。 我的代码:

public DrawingTheBall(Context context) {
    super(context);

    ball= BitmapFactory.decodeResource(getResources(),R.drawable.start_bg);;

}

@Override
protected void onDraw( Canvas canvas) {
    super.onDraw(canvas);

     ball.setWidth(canvas.getWidth());
     ball.setHeight(canvas.getHeight());


    Paint p=new Paint();
    canvas.drawBitmap(ball,0,0,p);


}

3 个答案:

答案 0 :(得分:2)

由于您只缩放原始位图,因此可能需要使用以下方法

Bitmap.createScaledBitmap(Bitmap src, int dstWidth, int dstHeight, boolean filter)

完整代码:

Bitmap newBmp = Bitmap.createScaledBitmap(ball, canvas.getWidth(), canvas.getHeight(), true);
canvas.drawBitmap(newBmp, 0, 0, p);

考虑移动" newBmp"换行到另一种方法,例如onSizeChanged(...)onDraw(...)几乎会一直被调用,而且一直重建相同的位图会很慢而浪费。

答案 1 :(得分:1)

从API19(KitKat)中引入了

Bitmap.setWidthBitmap.setHeight

您没有将minSdkVersion设置为19或更高版本吗?

更新

BitmapFactory.Options options = new BitmapFactory.Options();
options.inMutable = true;
ball= BitmapFactory.decodeResource(getResources(), R.drawable.start_bg, options);

答案 2 :(得分:0)

如果要将缩小版的位图资源加载到内存中,请将BitmapFactory.Options方法正确设置为decodeResource方法。 Load a Scaled Down Version into Memory如果您想缩放内存中已有的位图,请使用Bitmap#createScaledBitmap