使用android将图像加载到地图标记中

Posted

技术标签:

【中文标题】使用android将图像加载到地图标记中【英文标题】:Load Image into map Marker using android 【发布时间】:2016-04-14 02:51:48 【问题描述】:

我正在尝试将位图添加到谷歌地图标记图标。

下面是我将图像添加到标记图标的代码。由于位图大小,应用程序崩溃

错误:java.lang.IllegalArgumentException:尺寸为 4096x8192 的纹理大于支持的最大尺寸 4096x4096

BitmapFactory.Options options = new BitmapFactory.Options();
        options.inJustDecodeBounds = true;
        int imageHeight = options.outHeight;
        int imageWidth = options.outWidth;
        String imageType=options.outMimeType;
        if(imageWidth > imageHeight) 
            options.inSampleSize = calculateInSampleSize(options,10,10);//if landscape
         else
            options.inSampleSize = calculateInSampleSize(options,10,10);//if portrait
        
        options.inJustDecodeBounds = false;


        Bitmap  mapbitmap = BitmapFactory.decodeFile("/storage/emulated/0/Pictures/TAG_IMG_25.2571724_55.2994563.jpg", options);

latLng=new LatLng(25.254376, 55.2973058);

marker = googleMap.addMarker(new MarkerOptions()
            .position(latLng)
            .title(_title)
            .snippet("dubai")
            .icon(BitmapDescriptorFactory.fromBitmap(mapbitmap)));

public static int calculateInSampleSize(
            BitmapFactory.Options options, int reqWidth, int reqHeight) 
        // Raw height and width of image
        final int height = options.outHeight;
        final int width = options.outWidth;
        int inSampleSize = 1;

        if (height > reqHeight || width > reqWidth) 

            // Calculate ratios of height and width to requested height and width
            final int heightRatio = Math.round((float) height / (float) reqHeight);
            final int widthRatio = Math.round((float) width / (float) reqWidth);

            // Choose the smallest ratio as inSampleSize value, this will guarantee
            // a final image with both dimensions larger than or equal to the
            // requested height and width.
            inSampleSize = heightRatio < widthRatio ? heightRatio : widthRatio;
        

        return inSampleSize;
    

【问题讨论】:

错误出现在哪一行? 关于将位图添加到标记.icon 我认为calculateInSampleSize() 在您的情况下返回 1,您能确认一下吗?初始化options后直接使用int imageHeight = options.outHeight;。看起来您缺少将图像尺寸实际读入options 的代码。 【参考方案1】:

答案就在你的问题本身。

Textures with dimensions4096x8192 are larger than the maximum supported size 4096x4096

因此,您必须使用任何图像编辑器(例如 Photoshop)将图像尺寸减小到 4096x4096 以下。

如果你不熟悉,这里是tutorial。

【讨论】:

这不是一个合适的解决方案,例如使用设备相机拍摄的用户提供的图像。 使用 [设置宽度和高度](developer.android.com/reference/android/graphics/…, int, int, android.graphics.Bitmap.Config)) 创建位图(或在本例中重新创建)更适合没有上述异常?

以上是关于使用android将图像加载到地图标记中的主要内容,如果未能解决你的问题,请参考以下文章

swift ios中的自定义谷歌地图标记图标图像

Android-Maps-Extensions 异步加载标记图像

高德地图——标记

高德地图——标记

从图像 URL 将图标设置为地图中的标记

谷歌地图上的自定义标记如下图