1

我有一个混合了 jpeg 和 png 瓷砖的 mbtiles 数据库。png 瓦片是出于透明的原因而存在的,但是当它们在 osmdroid 中显示时,透明区域是黑色的。通常黑色透明区域表示您的图像被渲染为 JPEG,而不是支持透明度的格式。同样值得注意的是,数据库在我使用的任何其他查看器中都可以正常呈现。

我对 osmdroid api 和代码库还很陌生,任何人都可以提供一个可以查看的好地方或我可以检查的类名吗?我已经在谷歌上广泛搜索了这个问题,并找到了一个我认为是在正确的轨道上做某事的例子,但是覆盖该类并没有让我得到看起来正确的 png 瓷砖。

TIA,特兰

4

1 回答 1

2

我写了您链接的博客文章并查看了 osmdroid 源代码,但我缺少有关您的设置和数据库中用于找到问题解决方案的图块的更多信息。

但是,由于您要求提供一些类名,因此您可以检查一下,我会尝试为您提供图块的运行方式-然后您可以自己查看代码,我希望这对您找到黑色区域的原因有所帮助

1) [TilesOverlay.java] 向您的 Tile Provider #Line 168 请求具有坐标 (x,y) 和缩放因子的图块

2)[MapTileProviderArray](如果是其他提供者,您需要在其中找到方法“getMapTile”)将尝试加载正确的图块#Line 121

3) [MapTileModuleProviderBase] 会将请求发送到您的特定图块提供商-在您的情况下,我猜是文件存档提供商#Line 241

4) [MapTileFileArchiveProvider] 从您的 mbtiles 数据库 #Line 210 & 169 获取数据的输入流

5) [MBTilesFileArchive] 为请求的图块读取数据库#Line 56

6) [MapTileFileArchiveProvider] 从您指定的 tileSource #Line 215 请求位图

7) [BitmapTileSourceBase] 使用Android Class BitmapFactory创建Bitmap #Line 130

8) [MapTileModuleProviderBase] 将 Bitmap (#Line 210) 传递给您的 Provider [MapTileProviderArray] (#Line 135),最后 [MapTileProviderBase] 将 Bitmap 添加到缓存并发送消息以重绘 Tiles (#Line 108 & 113)

由于缓存适用于来自每个 tilesource 和提供者的位图,我认为您的问题不会更进一步。如果问题出在位图的缓存中,那么整个 osmdroid 系统中根本就没有任何透明图块。所以猜测你的问题是在这些步骤之间的某个地方。

我希望这可以帮助您找到问题。

问候

PS:因为我通常不在这里发帖,所以我没有帐户,只能提供 2 个链接。我提到的所有文件都可以在这里找到:osmdroid trunk

于 2013-01-03T05:26:35.393 回答