在Android

时间:2015-04-24 08:43:01

标签: android bitmap size scale

我有一个我要在画布上显示的位图,我希望它的大小(宽度和高度)相对于屏幕大小,所以如果我有一个大屏幕,位图会很大,如果我有一个小屏幕位图会很小。)

我有两个选择:

  1. 创建位图的多个版本,每个版本的大小不同,并将它们放在适当的可绘制目录中。

  2. 只使用一个位图大小,只需相对于画布大小动态缩放它,然后根据需要绘制它。

  3. Google似乎更喜欢第一种方式,但我不知道为什么。有人能告诉我什么是首选方式吗?

2 个答案:

答案 0 :(得分:0)

尝试此解码位图:

其中imagefilepath是图像的路径名,它将在String中隐藏,使用

转换为File

文件照片=新文件(imageFilePath);

照片是图片的文件名,现在您可以根据自己的要求设置高度和宽度。

Bitmap bitmap = decodeFile(photo);
            bitmap = Bitmap.createScaledBitmap(bitmap,150, 150, true);
            imageView.setImageBitmap(bitmap);

    private Bitmap decodeFile(File f){
    try {
        //decode image size
        BitmapFactory.Options o = new BitmapFactory.Options();
        o.inJustDecodeBounds = true;
        BitmapFactory.decodeStream(new FileInputStream(f),null,o);              
        //Find the correct scale value. It should be the power of 2.
        final int REQUIRED_SIZE=70;
        int width_tmp=o.outWidth, height_tmp=o.outHeight;
        int scale=1;
        while(true){
            if(width_tmp/2<REQUIRED_SIZE || height_tmp/2<REQUIRED_SIZE)
                break;
            width_tmp/=2;
            height_tmp/=2;
            scale++;
        }

        //decode with inSampleSize
        BitmapFactory.Options o2 = new BitmapFactory.Options();
        o2.inSampleSize=scale;
        return BitmapFactory.decodeStream(new FileInputStream(f), null, o2);
    } catch (FileNotFoundException e) {}
    return null;
}

答案 1 :(得分:0)

如果您只需要知道这两个选项中最好的选项,那么我就说选项1.对于无法处理大位图的小型手机,选项2将会出现问题。