0

Android 데이터베이스에서 사용하려는 바이트 배열로 내 서버의 데이터베이스에 이미지 모음이 저장되어 있습니다..NET에서 만든 바이트 배열을 사용하여 Android의 ImageViewer 위젯에 이미지 표시

바이트 배열이 IsolatedStorageFileStream에 저장하기 때문에 .NET의 WriteableBitmap (WBMP)를 사용하여, 윈도우 폰 7 응용 프로그램에서 이미지에서 만든 (isfs) : 안드로이드 응용 프로그램에서

 wbmp.SaveJpeg(isfs, newWidth, newHeight, 0, 90); 

, 나는이 이미지 중 하나를 표시하는 데 사용하려는 ImageView 위젯. 나는 바이트 배열 (페이로드) 디코딩 BitmapFactory를 사용하여 시도하지했습니다

Bitmap bmp = BitmapFactory.decodeByteArray(payload, 0, payload.length); 
    img1.setImageBitmap(bmp); 

을하지만 그것은 작동하지 않습니다 - 어떤 이미지 표시를 내가 디버거를 단계별로 때 BMP는 null입니다. 이것은 BitmapFactory가 바이트 배열을 제대로 디코딩 할 수 없음을 나타냅니다. 윈도우 폰 7의

, 난 그냥 MemoryStream을 (mstream), 그 MemoryStream을와의 SetSource 방법을 비트 맵 (BMP)로 전화로 바이트 [] (현실을)로드 : 그럼

mstream = new MemoryStream(reality); 
    bmp.SetSource(mstream); 

안드로이드에 그때 BitmapFactory를 사용하여 MemoryFile의의 InputStream을로드하는 MemoryFile으로 바이트 배열을 읽기 시도 :

MemoryFile mf; 
     try { 
      mf = new MemoryFile("myFile", payload.length); 
      mf.writeBytes(payload, 0, 0, payload.length); 
      InputStream is = mf.getInputStream(); 
      Bitmap bmp = BitmapFactory.decodeStream(is); 
      img1.setImageBitmap(bmp); 
     } catch (IOException e) {    
      e.printStackTrace(); 
     } 

을하지만이 여전히 작동하지 않습니다.

이미지를 표시하기 위해 Android에서이 형식의 바이트 배열을 성공적으로로드 할 수 있습니까?

+0

logcat을 검사하여 오류가 있는지 확인 했습니까? – wilbur4321

+0

그래,이 말은 : 07-27 01 : 13 : 55.629 : DEBUG/skia (7808) : --- SkImageDecoder :: Factory returned null – ckbhodge

답변

0

Bing 및 여기에 따르면이 오류는 잘못된 이미지를 나타냅니다. 나는 당신이 적당한 URL을 다운로드하고 있음을 신중히 재확인 할 것이다. 그렇다면 해당 바이트 []의 내용을 로그에 인쇄 해보십시오 (또는 디버거에서 확인하십시오). 그것이 어떤 종류의 html 메시지인지 확인하십시오.

빙고! 추가 정보를 기반으로 Base64로 인코딩 된 데이터입니다. 당신이 게시 한 내용이 일반 텍스트처럼 너무 많이 보였으므로 저의 Linux 컴퓨터에서 uudecode와 base64-d를 통해 실행 해 보았습니다. 후자는 JPEG로 인식되는 파일을 생성하여 작업했습니다.

디코딩은 아주 간단해야합니다. 이 변경이에

Bitmap bmp = BitmapFactory.decodeByteArray(payload, 0, payload.length); 
img1.setImageBitmap(bmp); 

을 :

import android.util.Base64; 
... 
payload = Base64.decode(payload, Base64.Default); 
Bitmap bmp = BitmapFactory.decodeByteArray(payload, 0, payload.length); 
img1.setImageBitmap(bmp); 

가 알려주세요!

+0

제안에 감사드립니다! 복잡한 데이터 유형의 다른 속성을 올바르게 얻었으므로 올바른 웹 서비스 URL을 호출하는 것 같습니다. BitmapFactory 클래스를 사용하여 디코딩하지 않는 것은 바로 byte []입니다. 여기에 바이트 배열의 문자열 표현의 처음 몇 문자입니다 : /9J/4AAQSkZJRgABAQEAgwCDAAD/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoMDAsKCwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT 이미지 데이터처럼 보인다 (이 같은 웹 서비스 메서드가 제대로 WP7에 디코딩 작업 바이트 배열을 반환) . – ckbhodge

+0

웹 서비스에 똑같은 호출을하는 .NET 프로젝트를 추적했습니다.바이트 배열의 문자열 표현의 첫 번째 부분은 동일하게 보입니다. 이것은 안드로이드의 BitmapFactory가 .NET에서 유효한 인코딩인데도 디코딩하는 방법을 모른다는 것을 알게 해줍니다. 어떤 아이디어? – ckbhodge

+0

@ckbhodge : 나는 그 문제를 안다고 생각한다. 위의 편집 된 답변을 참조하십시오. – wilbur4321

관련 문제