2016-04-24 61 views
0

我有這個代碼,它在android工作室非常好,但不是在xamarin bitmap.Compress()在xamarin中有不同的參數,我很困惑如何將圖像轉換爲base64或二進制xamarin.android?如何將圖像轉換爲xamarin.android中的base64?

我在3號線receving錯誤:

(bitmap.Compress()有一些無效參數)。

Bitmap bitmap = BitmapFactory.DecodeResource(Resources, Resource.Drawable.ace1); 
ByteArrayOutputStream bao = new ByteArrayOutputStream(); 
bitmap.Compress(Bitmap.CompressFormat.Jpeg, 100,bao); 
byte[] ba = bao.ToByteArray(); 
string bal = Base64.EncodeToString(ba, Base64.Default); 
+0

這是一個編譯期時間錯誤還是異常? –

+0

明顯的錯誤 –

+0

異常和編譯時錯誤都是錯誤。目前還不清楚這是哪一個。這聽起來可能是編譯時錯誤,但你應該編輯你的問題更清楚。 –

回答

2

如果你看看Xamarin中的documentation for Bitmap.Compress,你會發現最後一個參數是Stream

ByteArrayOutputStream .NET中相當於是MemoryStream,所以你的代碼將是:(你可以使用Convert.ToBase64String代替Base64.EncodeToString如果你想,太)

Bitmap bitmap = BitmapFactory.DecodeResource(Resources, Resource.Drawable.ace1); 
MemoryStream stream = new MemoryStream(); 
bitmap.Compress(Bitmap.CompressFormat.Jpeg, 100, stream); 
byte[] ba = stream.ToArray(); 
string bal = Base64.EncodeToString(ba, Base64.Default); 

+0

line byte []中有一個錯誤ba = stream.ToArray();流不能轉換爲byte [] –

+0

@EhsanUllah:固定 - 'stream'聲明應該指定了一個編譯時類型的'MemoryStream',這是'ToArray'聲明的地方。 –

+0

你能否澄清你的答案jon? –

0

這是我應得一個Byte[]Bitmap對象:

Byte[] imageArray = null; 
Bitmap selectedProfilePic = this.GetProfilePicBitmap(); 

if (selectedProfilePic != null) { 
    using (var ms = new System.IO.MemoryStream()) { 
     selectedProfilePic.Compress (Bitmap.CompressFormat.Png, 0, ms); 
     imageArray = ms.ToArray(); 
    } 
} 

希望這有助於。

+0

感謝您的回答,您的回答也很好,ahmed –