如何使用PNG格式压缩位图?

时间:2017-08-28 12:25:43

标签: android bitmap android-bitmap

我有一个自定义视图(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是一种无损格式,所以有人可以建议一个解决方案吗?

先谢谢你。

1 个答案:

答案 0 :(得分:3)

  

我试着像这样压缩

您无法将Bitmap“压缩”为另一个Bitmap。图像以某些文件格式(例如,PNG,JPEG,WebP)在磁盘上压缩Bitmap 总是未压缩。

  

如果您使用PNG格式,那么它将不会压缩您的图像,因为PNG是无损格式

这与您的问题无关。 PNG是一种磁盘格式。 Bitmap不是。无论您使用何种图像格式,从BitmapBitmap都不会“压缩”位图。

  

所以有人可以建议一个解决方案吗?

将图像的分辨率降低90%左右。

或者,使用处理大图像的视图,例如this one