【问题标题】:Using BitmapRegionDecoder to load large images使用 BitmapRegionDecoder 加载大图
【发布时间】:2015-04-23 18:49:03
【问题描述】:

我正在尝试在 Android 平板电脑应用程序中从互联网加载一个非常大的图像。我知道如何加载较小尺寸的样本,但注意到它会妨碍图像的分辨率。 android 文档告诉我有关 BitmapRegionDecoder 的信息,以帮助将图像加载到图块中,但似乎没有太多文档。 我正在做这样的事情:-

BitmapRegionDecoder decoder = BitmapRegionDecoder.newInstance(inputstream, false);

我知道我必须通过传递不同的 rect 对象来根据需要多次循环以下代码以获取整个图像

    region = decoder.decodeRegion(new Rect(0, 0, 50, 50), null);

但我不明白如何将所有这些位放在一个图像视图中的正确位置。任何例子都会很有帮助

【问题讨论】:

  • 您正在尝试做的事情听起来像是您想挑战区域解码器的目的。您也可以尝试加载整个巨大的位图而不是碎片并将它们连接在一起。最后,无论哪种方式,您都会冒着内存不足错误的风险。区域解码器的重点是从一个巨大的位图中获取一个剪辑。一个用例可能是可以用滑动手势平移的地图视图。您将仅使用区域解码器计算位图加载的当前可见剪辑并将其显示在您的地图视图中。您需要做的实际上是加载一个缩放版本。

标签: android bitmap


【解决方案1】:

您正在尝试做的事情听起来像是想挑战区域解码器的目的。您也可以尝试加载整个巨大的位图而不是碎片并将它们连接在一起。最后,无论哪种方式,您都会冒着内存不足错误的风险。区域解码器的重点是从一个巨大的位图中获取一个剪辑。一个用例可能是可以使用滑动手势平移的地图视图。您将仅使用区域解码器计算位图加载的当前可见剪辑并将其显示在您的地图视图中。实际上,您需要做的是加载一个缩放版本。

【讨论】:

  • 我相信最初的意图是使用区域解码器,但只加载部分内存。然后使用该内存以棋盘样式将该区域输出到显示器。这样可以在屏幕上查看 6000 x 4000 24MP 图像。有时通过 OpenGL 使用多个纹理完成的平铺样式。
【解决方案2】:

是的,您可以使用 BitmapRegionDecoder 来查看基于 Tiles 的大图像

这里的这个人实现了一个 TileBitmapDrawable 类,您可以将其挂接到您的图像视图:

https://github.com/diegocarloslima/ByakuGallery

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-15
    • 2017-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多