Android 如何解决将位图转换为Base64字符串格式时出现的内存不足错误,反之亦然?

Android 如何解决将位图转换为Base64字符串格式时出现的内存不足错误,反之亦然?,android,bitmap,base64,Android,Bitmap,Base64,我需要使用SOAP请求将一些捕获的图像上传到.net Web服务器。由于SOAP也接受图像文件的字符串,所以我使用android.util.Base64类将捕获的图像文件转换为字符串 但是,当使用Base64编码格式将图像文件转换为字符串时,我遇到了内存不足错误 如何解决将图像文件转换为Base64格式字符串时出现的内存不足错误?能否将每个图像文件分块读取、转换,并在发送时将其附加到文件中,然后在发送时将该文件分块读取?能否将每个图像文件分块读取、转换,在发送时将它们附加到文件中,然后在发送时将

我需要使用SOAP请求将一些捕获的图像上传到.net Web服务器。由于SOAP也接受图像文件的字符串,所以我使用
android.util.Base64类
将捕获的图像文件转换为字符串

但是,当使用Base64编码格式将图像文件转换为字符串时,我遇到了内存不足错误


如何解决将图像文件转换为Base64格式字符串时出现的内存不足错误?

能否将每个图像文件分块读取、转换,并在发送时将其附加到文件中,然后在发送时将该文件分块读取?

能否将每个图像文件分块读取、转换,在发送时将它们附加到文件中,然后在发送时将文件分块读出来?

我想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。

我想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。

解码位图将意味着更多内存足迹。特别是,如果你只想从JPEG转换到Base64,这是一个很大的浪费

在我看到的大多数答案中,他们将其转换为JPEG>位图>字节[]>Base64。 当您将大jpeg解码为位图时,大多数内存异常都会发生

我仍然在寻找一个好的解决方案,但请检查这个答案。他正在将文件字节数组直接转换为Base64


解码为位图将意味着更多的内存足迹。特别是,如果你只想从JPEG转换到Base64,这是一个很大的浪费

在我看到的大多数答案中,他们将其转换为JPEG>位图>字节[]>Base64。 当您将大jpeg解码为位图时,大多数内存异常都会发生

我仍然在寻找一个好的解决方案,但请检查这个答案。他正在将文件字节数组直接转换为Base64


我想这里的第一步是获取内存分析器。我想这里的第一步是获取内存分析器。嗨,本,谢谢你的快速回放。问题是,我正在使用摄像头捕获图像,并将图像文件作为位图,将其转换为字节[],然后将此数组作为参数传递给android.util.Base64.encodeToString()方法,该方法将转换图像并返回Base64格式字符串。在那里,我得到了内存错误。你能用一个例子来解决吗?你能编辑你的问题以包含你正在使用的代码吗?嗨,本,谢谢你的快速重播。问题是,我正在使用摄像头捕获图像,并将图像文件作为位图,将其转换为字节[],然后将此数组作为参数传递给android.util.Base64.encodeToString()方法,该方法将转换图像并返回Base64格式字符串。在那里,我得到了内存错误。你能用一个例子来解决吗?你能编辑你的问题以包含你正在使用的代码吗?