要在所需空间内显示图片,我想调整一个比空间大的位图。
首先,图片将显示在将使用全屏高度和2/3宽度的空间上。
我在比率方面解决了这个问题。
首先获得比率值
如果(空间上的图片宽度)和(高度不是&t; t)那么, ratio =宽度(图片)/空间宽度
如果(空间上的图片高度)和(宽度不等)那么, ratio =身高(图片)/空间高度
如果宽度和高度都超过了空间,那么
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);