作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我试图创建一个特定高度的缩略图,但保持纵横比。我正在使用下面的代码,但是如果图像有点小,生成的图像将不会填充缩略图区域,就会出现问题。 imageURI 只是图像的路径。
BitmapFactory.Options o = new BitmapFactory.Options();
o.inJustDecodeBounds = true;
BitmapFactory.decodeFile(imageURI, o);
final int REQUIRED_SIZE=70;
int width_tmp=o.outWidth, height_tmp=o.outHeight;
int scale=4;
while(true){
if(width_tmp/2<REQUIRED_SIZE || height_tmp/2<REQUIRED_SIZE)
break;
width_tmp/=2;
height_tmp/=2;
scale++;
}
BitmapFactory.Options o2 = new BitmapFactory.Options();
o2.inSampleSize=scale;
Bitmap bitmap = BitmapFactory.decodeFile(imageURI, o2);
最佳答案
您的代码总是将位图缩放到至少 1/4 的宽度或高度。如果原始图像已经足够大,它会更小。
我假设您在 ImageView(您的缩略图区域?)中显示图像。如果图像没有填满 ImageView,您必须配置 ImageView 以正确调整图像大小。如果您的 ImageView 和要显示的图像具有不同的纵横比,使图像填充 ImageView 的唯一方法将扭曲图像。
我所做的:我使用 BitmapFactory 将图像解码为更大的尺寸,但接近我希望缩略图具有的尺寸。最好使用 2 的幂作为缩放参数,所以我这样做了。然后我设置 ImageView 的 android:scaleType 参数使图像显示为我喜欢的:
public static Bitmap decodeBitmap(Uri bitmapUri, ContentResolver resolver, int width, int height) throws IOException{
InputStream is = resolver.openInputStream(bitmapUri);
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeStream(is,null,options);
is.close();
int ratio = Math.min(options.outWidth/width, options.outHeight/height);
int sampleSize = Integer.highestOneBit((int)Math.floor(ratio));
if(sampleSize == 0){
sampleSize = 1;
}
Log.d(RSBLBitmapFactory.class, "Sample Size: " + sampleSize);
options = new BitmapFactory.Options();
options.inSampleSize = sampleSize;
is = resolver.openInputStream(bitmapUri);
Bitmap b = BitmapFactory.decodeStream(is,null,options);
is.close();
return b;
}
<ImageView android:scaleType="fitXY"></ImageView>
关于java - Android,Java,创建保持纵横比的缩略图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6635575/
我有一张 table 。我希望它的数据垂直和水平居中。 我使用了 align="center"valign="middle" ,但它没有用。
我是一名优秀的程序员,十分优秀!