我的应用程序执行的步骤: -
我的代码: -
Bitmap myimage = loadimage(path+temppos+".jpg");
Bitmap finalimage = getResizedBitmap(myimage,width,height);
//save image
.....
//recyclebitmap
myimage.recycle();
finalimage.recycle();
的LoadImage: -
public Bitmap loadimage(String path)
{
BitmapFactory.Options options = new BitmapFactory.Options();
options.inPreferredConfig = Bitmap.Config.RGB_565;
options.inDither=true;
options.inPurgeable=true;
options.inInputShareable=true;
return BitmapFactory.decodeFile(path, options);
}
现在我'在gridview上填充这些图像。
输出(前): -
输出(后): -
Before
最初对应的地方,只下载了几张图片。
并且After
对应于下载所有图像后。
现在,我认为这可能是因为Bitmap.recycle()
方法,但不知道原因。如果我错了请纠正我,并在这里指出错误。
编辑:我必须添加网格视图,显示大约50个下载的图像,但只有前三个图像变得无法识别。
感谢。
答案 0 :(得分:0)
要获得调整后的位图,您可以使用以下代码:(取自this教程)
public static Bitmap decodeSampledBitmapFromPath(String path, int reqWidth,
int reqHeight) {
final BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeFile(path, options);
options.inSampleSize = calculateInSampleSize(options, reqWidth,
reqHeight);
// Decode bitmap with inSampleSize set
options.inJustDecodeBounds = false;
Bitmap bmp = BitmapFactory.decodeFile(path, options);
return bmp;
}
public static int calculateInSampleSize(BitmapFactory.Options options,
int reqWidth, int reqHeight) {
final int height = options.outHeight;
final int width = options.outWidth;
int inSampleSize = 1;
if (height > reqHeight || width > reqWidth) {
if (width > height) {
inSampleSize = Math.round((float) height / (float) reqHeight);
} else {
inSampleSize = Math.round((float) width / (float) reqWidth);
}
}
return inSampleSize;
}
您还可以查看official site以获取有关加载位图的提示
修改强>
尝试将位图配置更改为ARGB_8888以获得最佳质量
因为RGB_565配置会产生轻微的视觉瑕疵,具体取决于源的配置(取自docs)
<强>更新强>
我认为您可以查看this answer,我认为这可以解决您的问题