좋은 하루 동료 개발자.안드로이드 게시물 고해상도 이미지 메모리 부족 실행
안드로이드가 앱에서 이미지를 업로드하는 것이 바쁩니다.
나는 또한 그것 (코드는 아래에 따라 올 것이다) 일했다.
하지만 큰 이미지 (10 메가 픽셀)를 보낼 때 내 응용 프로그램이 메모리 부족 예외로 인해 중단됩니다.
압축을 사용하는 것이 해결책이지만 전체 크기 이미지를 보내려면 어떻게해야합니까?
아마 나는 물줄기가있는 것 같지만 물줄기가 아니란 것을 생각합니다. 아마 urlconnection 도움이 될 수도 있지만 정말 몰라.
내가 파일 이름을 이름 파일을 제공 [0 9999] .JPG 이미지 날짜 포스트 값은 내가
작동하지만 난 아래의 코드 dropboxid 포스트 값에 대한 UID를 제공 FILEDATA 라고 고해상도 이미지를 전송하지 못하게하는 내 문제를 해결하고 싶습니다. ByteArrayOutputStream
를 사용하고 효과적으로 가에게 JPEG가 사용하는 메모리의 양을 두 배로 #toByteArray()
를 호출 할 때
종류
try
{
ByteArrayOutputStream bos = new ByteArrayOutputStream();
bitmap.compress(CompressFormat.JPEG, 100, bos);
byte[] data = bos.toByteArray();
HttpPost postRequest = new HttpPost(URL_SEND);
ByteArrayBody bab = new ByteArrayBody(data, "File" + pad(random.nextInt(9999) + 1) + ".jpg");
MultipartEntity reqEntity = new multipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);
reqEntity.addPart("Filedata", bab);
reqEntity.addPart("dropboxId", new StringBody(URLEncoder.encode(uid)));
postRequest.setEntity(reqEntity);
HttpResponse response = httpClient.execute(postRequest);
BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent(), "UTF-8"));
String sResponse;
StringBuilder s = new StringBuilder();
while((sResponse = reader.readLine()) != null)
{
s = s.append(sResponse);
}
if(d) Log.i(E, "Send response:\n" + s);
}
catch (Exception e)
{
if(d) Log.e(E, "Error while sending: " + e.getMessage());
return ERROR;
}
은 내가 파일에 대한 참조 만 저장합니다. 따라서 파일은 이미 저장되어 있습니다 (SD 카드에 있음). 업로드를 시작할 때부터 비트 맵을 가져옵니다. 내 주요 문제는 내가 어떻게 그 파일 inputstream에서 얻을 수있는 내 실체와 함께 게시 할 수있는 outputstream로 변환 모르겠다. 비트 맵 코드 bitmap = BitmapFactory.decodeFile (경로); 그래서 여기에 내가 ByteArrayBody bab = fileinputstream (path) 같은 것을해야합니까? – user1195015
그래서 .. 왜 비트 맵을 가져올까요? 원본 파일이 PNG이고 웹 서버가 PNG 만 허용합니까? 그렇지 않으면 - 단지 당신이 이미 가지고있는 파일을 업로드하십시오 - JPEG를 다시 인코딩하면 이미지에 더 이상한 유물이 생길 것입니다. ** 편집 ** : 추가 아파치 라이브러리를 가져 왔습니까? 이 경우'FileBody' 클래스가 있어야합니다. 그것을 사용할 수 있습니까 – Jens
내가 좋아하는 거의 모든 파일 형식을 보낼 수 있습니다. 하지만 여전히 파일에서 바이트를 가져 오는 방법에 대한 단서가 없습니다. 그러나 아이디어는 좋기 때문에 나는 그것에 google을 갈 것이라고 생각한다. 또는 간단한 예를 들어 보면 좋을 것입니다. 내가 뭔가를 찾으면 나는 그것을 게시 할 것이다. 조언 주셔서 감사합니다 – user1195015