2012-01-04 1 views
7

을 Heres 내 상황 바이트 배열에서 이미지를 얻기 : 내 서버에서 실행 편안한 WCF 서비스가이 안드로이드 응용 프로그램에 JSON 객체에

를, 서비스는 데이터베이스에서 사람과 차종에 대해 다양한 유형의 데이터를 얻기 위해 의미 해당 데이터를 단일 JSON 객체로 사용할 수 있습니다. 그것은 위대한 작품!

[EDIT] 서버의 파일 시스템에서 이미지 캐시를 유지 관리하는 또 다른 서비스가 있습니다. 요청이 RESTful 서비스로 보내지면 해당 서비스는 이미지 서비스에서 이미지를 요청합니다. 이미지가 이미 캐시에있는 경우 (요청과 동일한 너비, 높이 및 사람) 바이트 배열로 반환합니다. 이미지를 검색하려면이 서비스를 사용해야합니다.

이제 내가 원하는 것은 그 사람의 이미지입니다. 우리의 데이터베이스에서 이미지는 긴 raw (ew)입니다. 그러나 나는 그 문제를 이미 다뤘다 (이전 단락). 이제 이미지가 바이트 배열이됩니다. 나는 꽤 안드로이드에 익숙하지 않으며이 이미지를 검색하는 가장 좋은 방법은 무엇인지 모르겠습니다. 내가 할 수 있다고 생각한 것은 바이트 배열을 JSON 객체에 추가 한 다음 base64 디코더를 사용하여 드로어 블 이미지로 변환하는 것입니다. 그러나 시도 할 때마다 시간이 초과되어 JSON 객체의 char 버퍼의 임의의 인덱스에서 ','또는 ''가 예상됩니다.

문제없이 JSON 객체에서 작은 데이터 비트를 가져올 수 있었지만 이제는 거대한 바이트 배열이 있으므로 JSONObject는 나를 싫어합니다. 내 서비스에서이 이미지를 얻는 더 좋은 방법은 무엇입니까?

답변

10
  1. Base64는 문자열을 얻기 위해 바이트 배열을 인코딩합니다.
  2. JSON 개체에 문자열을 추가하여 보냅니다.
  3. JSON을 받으면 문자열을 가져옵니다.
  4. Base64로 디코딩하면 바이트 배열을 다시 가져옵니다.
  5. 이미지를 만들려면 바이트 배열을 사용하십시오.
+0

입니다. –

+0

그게 더 좋은 방법이라고 생각합니다 : http://stackoverflow.com/a/15929125/245460 –

0

이 질문을 storing images에서 확인하십시오. 파일 시스템에 항상 이러한 종류의 데이터를 저장하는 것이 좋습니다. 가능한 경우 해당 필드를 사용하지 말고 기존 이미지를 파일 시스템으로 이동하는 스크립트를 작성하십시오.

그런 다음 URL로 검색 할 수있는 파일 시스템 (또는 일종의 콘텐츠 관리 시스템)에 이미지를 저장해야합니다.

그런 다음 URL을 데이터베이스에 저장하십시오. 그러면 json 객체에서 이것을 보낼 수 있습니다.

{ 
... 
    image_url:<url from database> 
... 
} 

클라이언트가이를 받으면 해당 URL을 호출하고 이미지를 다운로드합니다.

클라이언트는 이미지를 검색하기 위해 별도의 호출을해야하지만 일반적으로 이진 데이터로 데이터베이스를 채우는 것보다 낫습니다. 또한 이미지를 백그라운드에서 다운로드하는 동안 데이터를 빠르게 표시하려는 경우에도 이점이 있습니다. Base64 인코딩을 사용하는 것보다 더 나은

+0

정확히 무엇을 의미하는지, 나는 조금 더 명확히하려고 노력했습니다. 내 편집을 확인하십시오. –

0

나는 그것이 내가 무엇을 찾고 있었다 믿는다 (WCF RAW programming에서) 스트림을 반환하는이 방법

 

[OperationContract, WebGet] 
public Stream GetTestImage(Image image) 
{ 
    MemoryStream stream = new MemoryStream(); 
    image.Save(stream, System.Drawing.Imaging.ImageFormat.Jpeg); 
    stream.Position = 0; 
    WebOperationContext.Current.OutgoingResponse.ContentType = "image/jpeg"; 
    return stream; 
} 
 
관련 문제