我正在创建一个需要在内部存储中存储一些多媒体文件的 Android 应用程序。用户可以从选择器中选择该多媒体文件。即使用户删除这些文件,这些文件也必须可用,因此它们会被复制到内部存储中。
这是我的代码:
final Bitmap bitm = MediaStore.Images.Media.getBitmap( this.getContentResolver(), uri );
final int bitmapRawLength = bitm.getAllocationByteCount();
final ByteBuffer byteBuffer = ByteBuffer.allocate( bitmapRawLength );
bitm.copyPixelsToBuffer( byteBuffer );
data = byteBuffer.array();
final ByteArrayInputStream in = new ByteArrayInputStream( data );
db.store( in );
因此,组成图像的字节通过InputStream复制到内部存储中的普通文件中。显然它有效,因为文件有内容。
稍后将图像加载到ImageView 中:
private void loadImage(File imgFile)
{
if ( imgFile.exists() ) {
final Bitmap bitmap = BitmapFactory.decodeFile( mediaFile.getPath() );
this.ivPictureBox.setImageBitmap( bitmap );
} else {
this.abortDueToMissingFile( imgFile );
}
return;
}
不幸的是,这不起作用。当需要加载该图像时,ImageView变为空白,不显示任何内容。
实际上,在日志中会出现以下消息:
D/skia: --- Failed to create image decoder with message 'unimplemented'
如果我在 Android Studio 中使用文件资源管理器并将图像导出到我的计算机,则 GwenView 会失败并显示消息“无法加载元数据”。
我怎样才能正确地存储带有完整信息的图像,或者正确地显示它,无论哪种更容易或可行?
30秒到达战场
相关分类