关于位图调整大小

时间:2015-02-03 14:32:39

标签: android bitmap

要在所需空间内显示图片,我想调整一个比空间大的位图。

首先,图片将显示在将使用全屏高度和2/3宽度的空间上。

我在比率方面解决了这个问题。

首先获得比率值

  1. 如果(空间上的图片宽度)和(高度不是&t; t)那么, ratio =宽度(图片)/空间宽度

  2. 如果(空间上的图片高度)和(宽度不等)那么, ratio =身高(图片)/空间高度

  3. 如果宽度和高度都超过了空间,那么

  4. 3-1,如果高度超过宽度那么, ratio =身高(图片)/空间高度

    3-2,如果宽度超过高度那么, ratio =宽度(图片)/空间宽度

    其次,使用比率

    调整位图大小

    在更改我的代码之后,有些图片按照我的预期重新调整大小,但有些图片没有。

    你能告诉我我的代码或逻辑错在哪里吗?

    以下是实际代码

    private float getBitmapSize(File imageFile) 
    {
        BitmapFactory.Options options = new BitmapFactory.Options();
        options.inJustDecodeBounds = true;
        BitmapFactory.decodeFile(imageFile.getAbsolutePath(), options);
        int[] activitySize = getScreenSize(); //get activity screen size
    
        float ratio = 0;
        if(options.outWidth > activitySize[0]*(2/3) || 
            options.outHeight > activitySize[1] )
        {   //If the picture size over the designated view size
    
            if(options.outWidth > activitySize[0]*(2/3) && 
                options.outHeight < activitySize[1])
            {   //width over-size case
                ratio = options.outWidth / activitySize[0]*(2/3);
            }
            else if(options.outHeight > activitySize[1] && 
                options.outWidth < activitySize[0]*(2/3))
            {   //height over-size case
                ratio = options.outHeight / activitySize[1];
            }
            else
            {   //in case of width and height both over-size
                if((options.outHeight / activitySize[1]) > 
                    (options.outWidth / activitySize[0]*(2/3)))
                {   
                    ratio = options.outHeight / activitySize[1];
                }
                else
                {
                    ratio = options.outWidth / activitySize[0]*(2/3);
                }
            }
    
        }       
        return ratio;
    }
    
    private int[] getScreenSize() //returns [x,y] value of screen size
    {
        Window wm = getWindow();
        Display display =     
            SurfaceViewExample.this.getWindowManager().getDefaultDisplay();
            //The name of this activity is SurfaceViewExample
    
        int screenWidth = display.getWidth();//full screen width
        int screenHeight = display.getHeight();//full screen height
    
        Rect rc = new Rect();
        wm.getDecorView().getWindowVisibleDisplayFrame(rc);
        int topBarHeight = 
            wm.findViewById(Window.ID_ANDROID_CONTENT).getTop();
            //Status bar + title bar
        int statusBarHeight = rc.top;
        int titleBarHeight = topBarHeight - statusBarHeight;
    
        int[] activitySize = new int[2];
        activitySize[0] = screenWidth;
        activitySize[1] = (screenHeight - topBarHeight);
    
        return activitySize;
    }
    

    以下是调整大小部分

    float ratio = getBitmapSize(file);
    Bitmap bitmap = Images.Media.getBitmap(getContentResolver(),
            Uri.fromFile(file));
    bitmap = Bitmap.createScaledBitmap(bitmap, 
        (int)(bitmap.getWidth()*(1/ratio)), 
        (int)(bitmap.getHeight()*(1/ratio)), true);
    

0 个答案:

没有答案