当前位置: 首页 > 知识库问答 >
问题:

将位图转换为Byte[]&将Byte[]写入文件:illegalArgument异常

姜鹏程
2023-03-14
 public static void writeBitmapWithCompress(final String localFileName, Bitmap b){
        int bytes = b.getByteCount();

        ByteBuffer buffer = ByteBuffer.allocate(bytes); //Create a new buffer
        b.copyPixelsToBuffer(buffer); //Move the byte data to the buffer
        byte[] array = buffer.array();
       // byte[] encodedString  = Base64.encode(array, Base64.DEFAULT);
        byte[] decodedString = Base64.decode(array, Base64.DEFAULT);
       // Bitmap decodedByte = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length);

        Timber.d(">> social localFileName"+ localFileName);
        try {
            FileOutputStream fileOutputStream = new FileOutputStream(localFileName);
            fileOutputStream.write(decodedString);
            fileOutputStream.flush();
            fileOutputStream.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

在这行获取异常-->byte[]decodedString=base64.decode(array,base64.default);bad base64。是否有其他方法可以不使用任何压缩来完成这项任务?

StackTrace-->

dalvik.system.vmruntime.newnonmovablearray(原生方法)在Android.graphics.bitmapfactory.nativeDecodeStream(原生方法)在Android.graphics.bitmapfactory.decodeStream(原生方法)02-08在Android.graphics.bitmapfactory.decodeStreaminter(bitmapfactory.java:635)i/dalvikvm:
在Android.graphics.bitmapfactory.decodeStreaminal 417)
在nl.changer.socialschools.common.utils.ResizeImage(utils.java:408)
在nl.changer.socialschools.common.utils.uploadPhotos(utils.java:408)
在nl.changer.socialschools.common.utils.uploadPhotos(utils.java:321)在nl.changer.socialschools.asyncPostService.createPost 08Android.os.looper.loop(looper.java:193)02-08 11:41:36.214 Android.os.handlerThread.run(句柄rthread.java:61)

共有1个答案

桑成荫
2023-03-14

试试这个,

 public void writeBitmapWithCompress(final String localFileName, Bitmap b){

    byte[] image_bytes = getBytes(b);

    try {
        FileOutputStream out = new FileOutputStream(localFileName);
        out.write(image_bytes);
        out.close();

    } catch (Exception e) {
        e.printStackTrace();
    }
}


// convert bitmap to byte array
public static byte[] getBytes(Bitmap bitmap) {
    ByteArrayOutputStream stream = new ByteArrayOutputStream();
    bitmap.compress(Bitmap.CompressFormat.PNG, 0, stream);
    return stream.toByteArray();
}
 类似资料:
  • 我目前正在开发一个C#web API。对于特定的调用,我需要使用对API的ajax调用发送2个图像,以便API可以将它们保存为数据库中的varbinary(max)。 null

  • 问题内容: 无法将image.image转换为[] byte。问题点用虚线包裹。 基本上,我需要new_image为[] byte格式,以便可以将其发送到我的S3存储桶。 谢谢您的帮助。 问题答案: 您需要一个byte.Buffer,而不是bufio.Writer。bytes.Buffer在需要写入器的写入器时使用。bufio.Writer只是在将数据转发到另一个写入器之前将其缓存在内存中。

  • 问题内容: 在这里很难说出要问什么。这个问题是模棱两可,含糊,不完整,过于宽泛或夸张的,不能以目前的形式合理地回答。如需帮助澄清此问题以便可以重新打开, 请访问帮助中心。 7年前关闭。 如何在Java中将字节数组转换为File? 问题答案: 一个 文件对象 不包含文件的内容。它仅是硬盘(或其他存储介质,如SSD,USB驱动器,网络共享)上文件的指针。因此,我认为您想要将其写入硬盘。 您必须使用Ja

  • 问题内容: 我有一个表示RGB图像的整数数组,想将其转换为字节数组并将其保存到文件中。 在Java中将整数数组转换为字节数组的最佳方法是什么? 问题答案: 正如Brian所说,您需要确定需要什么样的转换。 您是否要将其保存为“正常”图像文件(jpg,png等)? 如果是这样,您可能应该使用Java Image I / O API。 如果要以“原始”格式保存,则必须指定写入字节的顺序,然后使用和NI

  • 问题内容: 我有一个byte.Buffer,我使用binary.Write()函数包装了数据。然后,我需要将此字节数组发送到C函数。使用Go 1.6时,我未能成功解决这一问题。 它在调用C函数的行上失败: C函数: 我能够使以下内容正常工作,但将字节数组转换为字符串感觉不对。有一个更好的方法吗?这种方法是否会对数据产生副作用? 同样,这需要在Go 1.6(引入了更严格的cgo指针规则)下工作。 谢

  • 问题内容: 我将类型为DataTable的对象保存到SQL 2005数据库中的类型为varbinary的字段中。我想找回它,但无法键入强制转换。这就是我保存它的方式。 “ dt”是DataTable对象实例。 问题答案: 您在说的是二进制序列化和反序列化。也许这会有所帮助。