我需要使用SOAP请求将一些捕获的图像上传到.net网络服务器。由于SOAP也接受图像文件的字符串,因此我使用android.util.Base64 class
将捕获的图像文件转换为字符串。
但是当使用Base64编码格式将图像文件转换为字符串时,我收到了内存不足的错误。
如何在将图像文件转换为Base64格式字符串时解决内存不足错误?
答案 0 :(得分:4)
我想Ben会说你要砍掉你的位图并分别编码每个块。另一方面,您必须使用多个base64块重建字节数组。应该对每个块进行排序,最好包括字节数组的最终大小,以便接收方知道要分配的大小。
类似的东西:
byte[] bitmap = byte[size];
int j = 1;
write to xml stream: final size = size
for (i=0; i<size; i+chunkSize) {
write to xml stream: base64.encode(bitmap from i to i+chunkSize)
write to xml stream: order = j++
}
如果您的接收器规范化您的xml,我不会严格依赖命令将其写入xml流。
答案 1 :(得分:0)
你能以块的形式阅读每个图像文件,转换它们,然后将它们附加到文件中,然后在发送时以块的形式读回该文件吗?
答案 2 :(得分:0)
解码到位图意味着更多的内存占用。如果你只是想从JPEG转换为Base64,那么它特别浪费。
在大多数答案中,我看到他们将其转换为JPEG&gt; BITMAP&gt;字节[]&gt; Base64编码。 将大jpeg解码为位图时会发生大部分内存异常。
我仍在寻找一个好的解决方案,但请查看此答案。他正在将文件字节数组直接转换为Base64。