我有一个自定义视图(WorldMapView)和一个可绘制的地图(3209x1287,PNG,64位颜色,1.33M),我正在
java.lang.RuntimeException:Canvas:尝试绘制太大(148679388bytes)的位图。
我试着像这样压缩。
WorldMapView worldMapView = (WorldMapView) itemView.findViewById(R.id.map_of_world);
Bitmap bitmap = ((BitmapDrawable) ContextCompat.getDrawable(context, R.drawable.map)).getBitmap();
ByteArrayOutputStream out = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 100, out);
Bitmap decoded = BitmapFactory.decodeStream(new ByteArrayInputStream(out.toByteArray()));
worldMapView.setImageBitmap(decoded);
但如果您使用PNG格式,那么它不会压缩您的图像,因为PNG是一种无损格式,所以有人可以建议一个解决方案吗?
先谢谢你。
答案 0 :(得分:3)
我试着像这样压缩
您无法将Bitmap
“压缩”为另一个Bitmap
。图像以某些文件格式(例如,PNG,JPEG,WebP)在磁盘上压缩。 Bitmap
总是未压缩。
如果您使用PNG格式,那么它将不会压缩您的图像,因为PNG是无损格式
这与您的问题无关。 PNG是一种磁盘格式。 Bitmap
不是。无论您使用何种图像格式,从Bitmap
到Bitmap
都不会“压缩”位图。
所以有人可以建议一个解决方案吗?
将图像的分辨率降低90%左右。
或者,使用处理大图像的视图,例如this one。