Osmdroid:渲染具有透明度的图块

时间:2012-12-21 18:16:36

标签: android osmdroid

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

我对osmdroid api和codebase相当新,任何人都可以提供一个好看的地方或者我可以检查的类名吗?我已经广泛搜索了这个问题,并发现某人正在做某事我认为正在沿着正确的轨道前进,但是重写那个课并没有让我看到正确的png瓦片。 / p>

TIA, Trann

1 个答案:

答案 0 :(得分:2)

我写了你链接的博客文章并查看了osmdroid源代码,但我遗漏了一些关于你的设置和数据库中的瓷砖的更多信息,以找到问题的解决方案。

但是既然你要求一些课程名称,你可以检查我会试着给你的瓷砖去的方式 - 然后你可以自己查看代码,我希望这有助于你找到原因黑色地区

1)[TilesOverlay.java]从你的Tile Provider #Line 168

请求一个坐标(x,y)和缩放系数的图块。

2)[MapTileProviderArray](如果是其他提供者,你需要找到方法“getMapTile”那里有insead)会尝试加载正确的tile #Line 121

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

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

5)[MBTilesFileArchive]读取所请求磁贴的数据库#Line 56

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

7)[BitmapTileSourceBase]使用Android类BitmapFactory创建位图#Line 130

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

由于缓存使用来自每个tilesource和提供程序的Bitmaps,我认为您的问题不再存在。如果问题出在Bitmaps的缓存中,那么在整个osmdroid系统中根本就没有任何透明的tile。所以猜测你的问题就在这些步骤之间。

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

问候

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