Android BitmapFactory无法解码图像

Android BitmapFactory无法解码图像,android,base64,android-bitmap,fileoutputstream,bitmapfactory,Android,Base64,Android Bitmap,Fileoutputstream,Bitmapfactory,在Android的React本机应用程序中,我尝试将一个映像(作为base64传递)写入文件系统,然后使用BitmapFactory对其进行解码 为什么BitmapFactory在存储图像时使用(Base64.decode)后仍然无法解码图像 错误: 无法解码位图: file:///data/data/com.reactnativeapp/files/rct-image-store/1 存储图像的自定义写入方法: @ReactMethod public void addImageFrom

在Android的React本机应用程序中,我尝试将一个映像(作为base64传递)写入文件系统,然后使用BitmapFactory对其进行解码

为什么BitmapFactory在存储图像时使用(Base64.decode)后仍然无法解码图像

错误:

无法解码位图: file:///data/data/com.reactnativeapp/files/rct-image-store/1

存储图像的自定义写入方法:

  @ReactMethod
  public void addImageFromBase64(String base64_image_data, Callback successCallback, Callback failureCallback){
    String imageStorageDir = this.reactContext.getApplicationContext().getFilesDir()+"/rct-image-store/";
    String file_uri = imageStorageDir+"1";
    try {
      File f = new File(imageStorageDir);
      if(!f.exists()) {
        f.mkdir();
      }
      FileOutputStream fos = new FileOutputStream(file_uri, false);
      byte[] decodedImage = Base64.decode(base64_image_data, Base64.DEFAULT);
      fos.write(decodedImage);
      fos.close();
      successCallback.invoke("file://"+file_uri);
    } catch (IOException ioe) {
      failureCallback.invoke("Failed to add image from base64String"+ioe.getMessage());
    } catch (Exception e) {
      failureCallback.invoke("Failed to add image from base64String"+e.getMessage());
    }
  }
访问图像的缩短方法(
fullResolutionBitmap
null
):

这是图片,底部看起来被裁剪了。由于原始图像和转换后的图像都有灰色区域,问题似乎不是图像的转换,而是源(相机)

原始图像:

转换图像:


我建议先调用
fos.flush()
,然后在
fos.close()之前调用
fos.getFD().sync()
。除此之外,从你的模拟器复制图像文件,看看它在你的开发机器上是否正常。我不知道什么是“Android文件传输”。您正在写入(
getFilesDir()
),大多数工具无法在生产硬件上直接访问该命令。尽管设置了
android:debuggable=“true”
,但仍无法运行命令
adb shell作为'com.reactnativeapp'cp/data/data/data/com.reactnativeapp/files/rct-image-store//APPDATA>。也许我没有足够的权限,
/data/system/packages.list
在我的Android上设置为
-rw-r-----
。嗯,
/APPDATA
不太可能是你可以使用的地方。尝试复制到外部存储器(
/storage/emulated/0
/sdcard
,等等)。我上传了图像,看起来灰色区域是此错误的来源。可能是FileOutputStream缓冲区问题?我建议调用
fos.flush()
,然后在
fos.close()之前调用
fos.getFD().sync()
。除此之外,从你的模拟器复制图像文件,看看它在你的开发机器上是否正常。我不知道什么是“Android文件传输”。您正在写入(
getFilesDir()
),大多数工具无法在生产硬件上直接访问该命令。尽管设置了
android:debuggable=“true”
,但仍无法运行命令
adb shell作为'com.reactnativeapp'cp/data/data/data/com.reactnativeapp/files/rct-image-store//APPDATA>。也许我没有足够的权限,
/data/system/packages.list
在我的Android上设置为
-rw-r-----
。嗯,
/APPDATA
不太可能是你可以使用的地方。尝试复制到外部存储器(
/storage/emulated/0
/sdcard
,等等)。我上传了图像,看起来灰色区域是此错误的来源。可能是FileOutputStream缓冲区问题?
InputStream inputStream = mContext.getContentResolver().openInputStream(Uri.parse(uri));;
BitmapFactory.Options outOptions = new BitmapFactory.Options();
Bitmap fullResolutionBitmap = BitmapFactory.decodeStream(inputStream, null, outOptions);/// fullResolutionBitmap==null