我正在使用chrisbanes的photoview库获取可缩放的图像。 https://github.com/chrisbanes/PhotoView
我要加载的图像具有2000x2000分辨率。 简单来说,我首先加载位图,然后在加载的位图上绘制一些内容。然后将位图加载到imageview。对于每种用途,我都需要对源图像进行不同的处理,因此需要创建一个位图来创建画布。但是在创建位图的行中,在某些设备中,该应用会抛出outOfMemoryException。我检查了日志,原始位图的大小为5250x5250,创建另一个具有相同大小的位图会消耗很多内存。
我尝试使用BitmapFactory.Options加载位图,我使用了inSampleSize,但它会降低图像质量。
def draw():
fig = plt.figure()
ax = fig.add_subplot(111)
plt.ion() # interactive mode is on
plt.show()
def onselect(data_input):
print(data_input)
PS = PolygonSelector(ax, onselect)
a = input() # prevent window from closing when execution is done
draw()
由于我使用photoview,所以imageview是可缩放的,即使完全缩放,我也需要图像非常详细,但是使用inSampleSize可以重新缩放图像。我希望它尽可能高效地存储内存。
答案 0 :(得分:0)
您应该能够使用Subsampling Scale Image View来处理大型图像,而不会遇到 OutOfMemoryError 。按照其他人的建议,不建议使用大图像,但这可以帮助您实现所需的功能。
该视图可选地使用子采样和图块来支持非常大的图像-加载了低分辨率基础层,并且在放大时,该视图层覆盖了可见区域的较小的高分辨率图块。这样可以避免在内存中保存过多的数据。它是显示大图像的理想选择,同时允许您放大高分辨率的细节。您可以为较小的图像以及显示位图对象时禁用平铺。
关于这一点,我想指出的重要一点是:-
经过测试,最高可达20,000x20,000像素,但较大的图像速度较慢