System.InvalidCastException:指定的强制转换无效。在Xamarin

时间:2016-05-26 05:27:17

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

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();
请告诉我这个问题。我在c#Xamarin

中实现了这个代码

2 个答案:

答案 0 :(得分:0)

这是因为实际上,GetDrawableState()会返回int[]并代表状态ID。 要从ImageView获取绘图,您应该使用GetDrawable()

所示的Web content

答案 1 :(得分:0)

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

请将图片中的以下代码引用至 Base64 转换。 它有时会帮助你。

Base64到位图:

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

Bitmap到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);
}