gpt4 book ai didi

java - Android 发布高分辨率图像内存不足

转载 作者:搜寻专家 更新时间:2023-11-01 09:08:11 26 4
gpt4 key购买 nike

开发者大家好。

我正忙着让 android 从应用程序上传图片。
我也让它工作了(代码将在下面跟随)。
但是当我发送大图像(10 百万像素)时,我的应用程序因内存不足异常而崩溃。
一个解决方案是使用压缩,但如果我想发送全尺寸图像怎么办?
我想也许有流的东西,但我不熟悉流。也许 urlconnection 可能有帮助,但我真的不知道。

我将文件名命名为 File[0 to 9999].jpg带有图像日期的发布值称为 Filedata我给post值dropboxid一个UID

下面的代码有效,但我很想解决阻止我发送高分辨率图像的问题。

亲切的问候

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;
}

最佳答案

当使用 ByteArrayOutputStream 然后调用 #toByteArray() 时,您有效地加倍了 JPEG 使用的内存量。 ByteArrayOutputStream 保存一个带有编码 JPEG 的内部数组,当您调用 #toByteArray() 时,它会分配一个 数组并从内部复制数据缓冲区。

考虑将大型位图编码为临时文件并使用 FileOutputStreamFileInputStream 编码并发送图像。

如果没有“上传”——我假设您的应用程序在内存中只有巨大的位图就可以“很好地”生存?

编辑:FileBody

File img = new File(this is where you put the path of your image)
ContentBody cb = new FileBody(img, "File" + pad(random.nextInt(9999) + 1) + ".jpg", "image/jpg", null);
MultipartEntity reqEntity = new multipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);
reqEntity.addPart("Filedata", cb);
reqEntity.addPart("dropboxId", new StringBody(URLEncoder.encode(uid)));

关于java - Android 发布高分辨率图像内存不足,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10350353/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com