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