2013-12-16 2 views
3

자바 문서에서 발견 된 몇 가지 다른 방법과 다른 솔루션의 여러 가지 해결책을 시도했으며 을 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가는 성공했지만, 0킬로바이트의 이미지를 작성하는 최종 Bitmap를 일으키는 다시 String로의 전환에 추가합니다.

+0

비트 맵을 나타내는 한 문자열에 포함 된 내용이 중요합니까? – Jave

+0

결국 원래의 비트 맵을 검색 할 수 있다면 문제가되지 않습니다. –

+0

아마도 Android의 기본 문자 인코딩은 항상 UTF-8이지만, 일반적으로 기본 문자 인코딩을 사용하지 않아야합니다. 내가 String Ctor와 getBytes에 대한 호출 모두에서 명시 적으로 UTF-8을 사용할 것입니다. –

답변

2

문제는 변환에 있지 않지만 결과를 확인하는 방법입니다. 두 배열을 비교하는 경우 ==을 사용하면 동일한 배열 참조 인 경우에만 true를 반환합니다. byte[] newImageBytes = encodedString.getBytes();으로 새 배열을 만들면 항상 false가됩니다. 당신이 전송하거나 어떤 방법으로 문자열을 사용하려는 경우 다른 주에 See this question for reference.

, 문자열을 얻을 Base64.encodeToString(imageBytes, Base64.NO_WRAP);를 사용하고, Base64.decode(encodedString, Base64.NO_WRAP) 그것을 다시 얻을 아마 더 좋다.
copyPixelsToBuffer() 메서드로 바이트 배열을 압축하지 않고 가져올 수도 있습니다 (예제는 this question 참조).

+0

나는이 전에 바이트 배열을 비교하기 위해'.equals()'를 사용했지만 작동하지 않았다. (나는 다시 돌아가서 여러분의 제안을 시도하겠다.) –

+1

@RhinoFeeder는 이 질문에 대한 답은'.equals (a2)'가 아니라'Arrays.equals (a1, a2)'를 사용합니다. – Jave

+1

성공 !! –

관련 문제