位图图像显示非常左上角,而不是缩放

时间:2011-02-20 19:24:54

标签: java android canvas bitmap

我正在尝试在Canvas上显示图片,但是当我调用drawBitmap方法时,我只获得了非常左上角,图像没有缩放到屏幕高度和宽度。这是我的代码,涉及自定义视图:

    private class ImageOverlay extends View {

    public ImageOverlay(Context context) {
        super(context);
    }

    @Override
    protected void onDraw(Canvas canvas) {

        Bitmap image = BitmapFactory.decodeFile(getPath(baseImage));
        Paint paint = new Paint();
        paint.setAlpha(200);

        canvas.drawBitmap(image, 0, 0, paint);
        Log.v(TAG, "Drew picture");

        super.onDraw(canvas);           
    }

    private String getPath(Uri uri) {
        String[] projection = { MediaStore.Images.Media.DATA };
        Cursor cursor = managedQuery(uri, projection, null, null, null);
        if(cursor!=null)
        {
            int column_index = cursor
            .getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
            cursor.moveToFirst();
            return cursor.getString(column_index);
        }
        else return null;
    }

baseImage是一个传递给我的活动的Uri对象,它是 NOT null!这是实际图像:
Actual image
以下是Canvas图片:
The canvas image

2 个答案:

答案 0 :(得分:2)

  

但是当我调用drawBitmap方法时,我只得到了左上角,图像没有缩放到屏幕的高度和宽度。

你告诉你的程序这样做:canvas.drawBitmap(image, 0, 0, paint);
因为(0,0)是左上角。

如果你需要一个较小的图像,你应该缩小它,有可能 Bitmap small = Bitmap.createScaledBitmap(image, width, height, false);

答案 1 :(得分:1)

使用Canvas.drawBitmap()版本执行所需的缩放,例如this one

顺便说一句,你的解压缩的Bitmap显然比你需要的要大得多,而且占用了大量的RAM。我建议使用BitmapFactory.Options.inSampleSize来减少它。