Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/190.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Osmdroid:渲染具有透明度的平铺_Android_Osmdroid - Fatal编程技术网

Android Osmdroid:渲染具有透明度的平铺

Android Osmdroid:渲染具有透明度的平铺,android,osmdroid,Android,Osmdroid,我有一个mbtiles数据库,它混合了jpeg和png图片。png平铺是出于透明的原因而存在的,但是当它们显示在osmdroid中时,透明区域是黑色的。通常,黑色透明区域表示图像渲染为JPEG格式,而不是支持透明的格式。同样值得注意的是,数据库在我使用的任何其他查看器中都可以很好地呈现 我对OSMDROIDAPI和代码库相当陌生,有谁能提供一个好的地方让我看看,或者提供一个我可以检查的类名吗?我在谷歌上搜索了这个问题,发现有人做了一些我认为是正确的事情,但是覆盖这个类并不能让我看到正确的png图

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

我对OSMDROIDAPI和代码库相当陌生,有谁能提供一个好的地方让我看看,或者提供一个我可以检查的类名吗?我在谷歌上搜索了这个问题,发现有人做了一些我认为是正确的事情,但是覆盖这个类并不能让我看到正确的png图片

蒂亚,
Trann

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

但是,既然您要求一些类名,您可以检查,我将尝试告诉您平铺的方式-然后您可以自己查看代码,我希望这足以帮助您找到黑色区域的原因

1) [tileOverlay.java]从磁贴提供商(第168行)请求具有坐标(x,y)和缩放因子的磁贴

2) [MapTileProviderArray](如果是其他提供程序,您需要在insead中找到“getMapTile”方法)将尝试加载正确的磁贴#第121行

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

4) [MapTileFileLearchiveProvider]从mbtiles数据库获取数据的输入流#第210行和第169行

5) [MBTilesFileArchive]读取数据库中请求的磁贴#第56行

6) [MapTileFileLearchiveProvider]从指定的tileSource第215行请求位图

7) [BitmapTileSourceBase]使用Android类创建位图#第130行

8) [MapTileModuleProviderBase]将位图(#第210行)传递给您的提供商[MapTileProviderArray](#第135行),最后[MapTileProviderBase]将位图添加到缓存中,并发送一条消息以重新绘制分幅(#第108和113行)

由于缓存可以处理来自每个tilesource和提供者的位图,我认为您的问题不会更严重。如果问题出在位图的缓存中,那么整个osmdroid系统中根本就不可能有任何透明分片。所以我猜你的问题就在这两个步骤之间

我希望这能帮助你找到问题所在

问候


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

感谢您的详细回复。我发现我的问题不是OSMdroid,而是添加了一些自定义代码。也就是说,开发人员似乎是使用Sqlite连接器获取Mbtiles数据,而不是直接通过osmdroid Mbtiles类呈现数据。这个直接的解决方案可能是从PNG blob中剥离透明度数据。我之所以说可能,是因为当我意识到这不是osmdroid的错时,我从来没有把问题解决过。