我已經嘗試了java文檔中找到的幾種不同方法,以及其他SO問題的幾種解決方案,併成功獲得了Bitmap
以轉換爲byte[]
,並且再次回來。將位圖轉換爲字節數組,字符串,然後一路返回
問題是我現在需要將此字節[]轉換爲String
,然後回到byte[]
,然後再回到Bitmap
。要回顧一下,我需要:
Bitmap -> byte[] -> String -> byte[] -> Bitmap
我知道這聽起來很奇怪,但我想要完成必須做這樣。下面是我試過的,如果有人能指出我做錯了什麼,我將不勝感激!
Bitmap bitmap = mv.getDrawingCache();
// Convert bitmap to byte[]
ByteArrayOutputStream output = new ByteArrayOutputStream(bitmap.getByteCount());
bitmap.compress(Bitmap.CompressFormat.PNG, 100, output);
byte[] imageBytes = output.toByteArray();
// Convert byte[] to string
// I have also tried using Base64.encodeToString(imageBytes, 0);
String encodedString = new String(imageBytes);
// Convert string to byte[]
byte[] newImageBytes = encodedString.getBytes();
if (imageBytes == newImageBytes) {
Toast.makeText(SignatureActivity.this, "SUCCESS!!", Toast.LENGTH_SHORT).show();
} else { // Sadly, we always get to this point :(
Toast.makeText(SignatureActivity.this, "BOOO", Toast.LENGTH_SHORT).show();
}
// Convert byte[] back to bitmap
bitmap = BitmapFactory.decodeByteArray(newImageBytes, 0, newImageBytes.length);
同樣,去Bitmap -> byte[] -> Bitmap
是成功的,但加入在轉換到String
和背面是造成最終Bitmap
寫0KB的圖像。
只要表示位圖,字符串包含的內容是否重要? – Jave
只要我最終可以從中檢索原始位圖,就沒關係 –
也許Android上的默認字符編碼始終是UTF-8,但通常應避免使用默認字符編碼。我會在String ctor和getBytes調用中明確使用UTF-8。 –