此代码用于压缩和调整我的应用程序中的图像图像显示模糊,大小减少到很多。你能解释一下这段代码是如何工作的,以及如何利用现有代码提高图像质量。
BitmapFactory.Options o = new BitmapFactory.Options();
o.inJustDecodeBounds = true;
BitmapFactory.decodeStream(new FileInputStream(f), null, o);
final int REQUIRED_SIZE = 200;
int scale = 1;
while (o.outWidth / scale / 2 >= REQUIRED_SIZE
&& o.outHeight / scale / 2 >= REQUIRED_SIZE)
scale *= 2;
BitmapFactory.Options o2 = new BitmapFactory.Options();
o2.inSampleSize = scale;
Bitmap bit1 = BitmapFactory.decodeStream(new FileInputStream(f),
null, o2);
答案 0 :(得分:0)
您的代码只是初始化位图选项以使用decodeStream(您将使用的输入图像或文件)之后设置一个规则,即所需的大小应该是> = 200宽度和高度,之后只是使用所需的流输出
创建最终位图BitmapFactory.Options o = new BitmapFactory.Options();
o.inJustDecodeBounds = true;
BitmapFactory.decodeStream(new FileInputStream(f), null, o);
final int REQUIRED_SIZE = 200;
int scale = 1;
while (o.outWidth / scale / 2 >= REQUIRED_SIZE
&& o.outHeight / scale / 2 >= REQUIRED_SIZE)
scale *= 2;
BitmapFactory.Options o2 = new BitmapFactory.Options();
o2.inSampleSize = scale;
Bitmap bit1 = BitmapFactory.decodeStream(new FileInputStream(f),
null, o2);
bit1.compress(Bitmap.CompressFormat.PNG, 100, out); //you can use this line and play with the value 100 in order to set quality of the image when its compresed
由于您的图像缩放到一定大小(> = 200宽度和高度),因此图像输出尺寸将首先取决于输入位图
如果要查看位图的尺寸,可以执行此操作
Log.e("Dimensions", bit1.getWidth()+" "+bit1.getHeight());
<强> Bitmap.compress 强>
编辑:正如Vladyslav Matviienko建议您可以将REQUIRED_SIZE增加到更大的值,因为就像我上面写的那样,您首先设置的是固定大小compress(Bitmap.CompressFormat格式,int quality,OutputStream stream)将位图的压缩版本写入指定的 输出流。