【问题标题】:System.InvalidCastException: Specified cast is not valid. in XamarinSystem.InvalidCastException:指定的强制转换无效。在 Xamarin
【发布时间】:2016-05-26 05:27:16
【问题描述】:
UserAvatar = FindViewById<ImageView>(Resource.Id.profilePic);  
BitmapDrawable drawable = (BitmapDrawable)UserAvatar.GetDrawableState();
Bitmap bitmap = drawable.Bitmap;
MemoryStream baos = new MemoryStream();
bitmap.Compress(Bitmap.CompressFormat.Png, 100, baos);
byte[] bb = baos.ToArray();
String image = Base64.Encode(bb, Base64Flags.Default).ToString();

我正在尝试将 imageview 图像编码为 base64 字符串格式,但我遇到了强制转换异常

BitmapDrawable drawable = (BitmapDrawable)UserAvatar.GetDrawableState();

请进入此 aboue 行。我正在 c# Xamarin 中实现此代码

【问题讨论】:

    标签: android android-fragments xamarin xamarin.ios xamarin.android


    【解决方案1】:

    发生这种情况是因为,实际上,GetDrawableState() 返回一个 int[] 并表示状态的 ID。 要从 ImageView 中获取可绘制内容,您应该使用GetDrawable(),如下所示https://forums.xamarin.com/discussion/14939/is-there-a-way-to-get-bitmap-from-imageview

    【讨论】:

      【解决方案2】:

      如前所述,GetDrawableState() 返回一个 int32[] 值。


      参考下面代码中ImageBase64的转换。 它有时会对你有所帮助。

      Base64 转位图:

      public Bitmap Base64ToBitmap(String base64String)
      {
          byte[] imageAsBytes = Base64.Decode(base64String, Base64Flags.Default);
          return BitmapFactory.DecodeByteArray(imageAsBytes, 0, imageAsBytes.Length);
      }
      

      位图转Base64:

      public String BitmapToBase64(Bitmap bitmap)
      {
          ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
          bitmap.Compress(Bitmap.CompressFormat.Png, 100, byteArrayOutputStream);
          byte[] byteArray = byteArrayOutputStream.ToByteArray();
          return Base64.EncodeToString(byteArray, Base64Flags.Default);
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-07-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-09
        • 1970-01-01
        • 2017-06-29
        相关资源
        最近更新 更多