首页 > 解决方案 > '图像解码失败。提供的图像必须是位图' - Google Map Marker 上的 SetIcon 引发错误

问题描述

尝试在 Google 地图地图标记上设置图标时出现以下错误:

[ERR] 2018 年 6 月 26 日上午 10:02:25:无法解码图像。提供的图像必须是位图。[ERR] 2018 年 6 月 26 日上午 10:02:25:在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () [0x0000c] in <0711a0626e0e4d58a44e8ca32787a4a9>:0 在 Java.Interop.JniEnvironment+InstanceMethods.CallVoidMethod (Java.Interop .JniObjectReference 实例,Java.Interop.JniMethodInfo 方法,Java.Interop.JniArgumentValue* args) [0x00069] in :0 at Android.Runtime.JNIEnv.CallVoidMethod (System.IntPtr jobject, System.IntPtr jmethod, Android.Runtime.JValue* parms) [0x0000e] in <5680b8d3acca4700bde9a113c467e3e5>:0 at Android.Runtime.JNIEnv.CallVoidMethod (System.IntPtr jobject, System.IntPtr jmethod, Android.Runtime.JValue [] parms) [0x00017] in <5680b8d3acca47035e46:013c .Gms.Maps。
--- 托管 Java.Lang.RuntimeException 堆栈跟踪结束 --- com.google.maps.api.android.lib6.common.apiexception.b:无法解码图像。提供的图像必须是位图。在 com.google.maps.api.android.lib6.impl.na(:com.google.android.gms.dynamite_dynamitemodulesb@12685024@12.6.85 (040406-197041431):12) 在 com.google.maps.api。 android.lib6.impl.oa(:com.google.android.gms.dynamite_dynamitemodulesb@12685024@12.6.85 (040406-197041431):7) 在 com.google.maps.api.android.lib6.impl.cy.a (:com.google.android.gms.dynamite_dynamitemodulesb@12685024@12.6.85 (040406-197041431):186) 在 com.google.android.gms.maps.model.internal.q.onTransact(:com.google.android .gms.dynamite_dynamitemodulesb@12685024@12.6.85 (040406-197041431):87) 在 android.os.Binder.transact(Binder.java:507) 在 com.google.android.gms.maps.model。

我可以看到它在 UpdateMarker 方法中失败,如下所示:

    public void UpdateMarker(IMarker markerInfo)
    {
      // _markerLookup is a dictionary defined earlier as:
      // private Dictionary<IMarker,Android.Gms.Maps.Model.Marker> _markerLookup = new Dictionary<IMarker, Android.Gms.Maps.Model.Marker>();
      // It is populated elsewhere
      // Check if the dictionary contains a key for the given value
      if (_markerLookup.ContainsKey(markerInfo))
      {
        Android.Gms.Maps.Model.Marker marker = _markerLookup[markerInfo];
        marker.Position = new LatLng(markerInfo.MapCoordinate.Lat, markerInfo.MapCoordinate.Lng);
        marker.Draggable = markerInfo.MarkerOptions.IsDraggable;

        // Create BitmapDescriptor from Resource - Blue_Vehicle definitely exists and is a .png image
        BitmapDescriptor bitmapDesc = 
        BitmapDescriptorFactory.FromResource(Resource.Drawable.Blue_Vehicle);

        if (bitmapDesc != null)
        {
          marker.SetIcon(bitmapDesc);
        }  
      }
    }

marker.SetIcon 方法正在寻找一个 BitMapDescriptor,如上所述,它是从图像资源创建的。

我不明白为什么它会抛出异常。如果有人能对这个问题有所了解,我将不胜感激。

标签: c#androidxamarin.androidgoogle-maps-markersgoogle-maps-android-api-2

解决方案


推荐阅读