我正在Images
中RecyclerView
的{{1}}上显示ImageView
,尺寸为50*50
。我已经使用了Google提供的指南Guide来使用Scaling等显示位图。此外,我还使用了Glide
库来设置Image。示例图像的代码是
public static int calculateInSampleSize(
BitmapFactory.Options options, int reqWidth, int reqHeight) {
// Raw height and width of image
final int height = options.outHeight;
final int width = options.outWidth;
int inSampleSize = 2;
if (height > reqHeight || width > reqWidth) {
final int halfHeight = height / 2;
final int halfWidth = width / 2;
// Calculate the largest inSampleSize value that is a power of 2 and keeps both
// height and width larger than the requested height and width.
while ((halfHeight / inSampleSize) >= reqHeight
&& (halfWidth / inSampleSize) >= reqWidth) {
inSampleSize *= 2;
}
}
return inSampleSize;
}
这是DecodeSampleBitmap的代码
public static Bitmap decodeSampledBitmapFromResource(int reqWidth, int reqHeight,byte[] bytes) {
// First decode with inJustDecodeBounds=true to check dimensions
final BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
options.inInputShareable=true;
options.inPurgeable=true;
// BitmapFactory.decodeResource(res, resId, options);
BitmapFactory.decodeByteArray(bytes,0,bytes.length,options);
// Calculate inSampleSize
options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight);
// Decode bitmap with inSampleSize set
options.inJustDecodeBounds = false;
return BitmapFactory.decodeByteArray(bytes,0,bytes.length,options);
}
这是使用Glide将Image设置为ImageView的代码
BitmapFactory.Options options = new BitmapFactory.Options();
BitmapFactory.decodeByteArray(imageBytes,0,imageBytes.length,options);
options.inJustDecodeBounds = true;
options.inInputShareable=true;
options.inPurgeable=true;
int imageHeight = options.outHeight;
int imageWidth = options.outWidth;
String imageType = options.outMimeType;
Drawable d=new BitmapDrawable(getResources(),decodeSampledBitmap(50,50));
Glide.with(getActivity())
.load(d).into(offerBinding.restImg);
尽管进行了所有这些计算,但总是会加载OutOfMemory error
,并且在加载更多图片时应用会崩溃。如何解决呢?
答案 0 :(得分:0)
对于您的base64String
至Imageview
,请像这样使用它
Glide.with(context)
.load(Base64.decode(base64String, Base64.DEFAULT))
.placeholder(R.drawable.placeholder) // load at start
.error(R.drawable.imagenotfound) // in case of error
.override(50,50)
.skipMemoryCache(true)
.into(rowImageView);
我希望它能正常工作