将URI转换为位图的问题(2014):

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将URI转换为位图的问题(2014):相关的知识,希望对你有一定的参考价值。

简而言之,我正在尝试从电话库中选择一个图像,以显示为另一个活动中要播放的位图(获得平均RGB)。

首先,我遇到了一些处理URI到位图转换的主题。很多人都有像(来自:Retrieve bitmap from uri)的建议:

    Uri imageUri = intent.getData();
    Bitmap bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(),imageUri);
    Imageview my_img_view = (Imageview ) findViewById (R.id.my_img_view);
    my_img_view.setImageBitmap(bitmap);

Bitmap行是重要的一行。每当我在我的模拟器上运行我的android应用程序时,应用程序崩溃(Eclipse中的调试器确认发生在URI - >位图转换行),如果我将转换放在不同的活动(它是捆绑的),那么它仍然崩溃在Uri - >位图转换线上。

我不确定为什么会这样。我已经尝试在初始意图上设置“EXTERNAL_CONTENT_URI”和“INTERNAL_CONTENT_URI”,两种选择无关紧要。我将继续寻找我的问题的潜在解决方案,但我现在时间很短,我觉得如果我从外部来源得到一些建议会有所帮助。

任何人都知道为什么它总是在那条线上崩溃,或者我的问题是否有任何可能的解决方案?谢谢。

答案

请从uri获取输入流

Uri IMAGE_URI = imageReturnedIntent.getData();
InputStream image_stream = getContentResolver().openInputStream(IMAGE_URI);
Bitmap bitmap= BitmapFactory.decodeStream(image_stream );

开始意图

private static final int REGUEST_CODE = 100;
Intent photoPicker = new Intent(Intent.ACTION_PICK);
photoPickerIntent.setType("image/*");
startActivityForResult(photoPickerIntent, REGUEST_CODE); 

得到结果

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent imageReturnedIntent) { 
    super.onActivityResult(requestCode, resultCode, imageReturnedIntent); 
switch(requestCode) { 
case REGUEST_CODE :
    if(resultCode == RESULT_OK){  
        Uri IMAGE_URI = imageReturnedIntent.getData();
        InputStream image_stream = getContentResolver().openInputStream(IMAGE_URI);
        Bitmap bitmap= BitmapFactory.decodeStream(image_stream );
        my_img_view.setImageBitmap(bitmap)
    }
}

}

另一答案
Uri imageUri = intent.getData(); Uri IMAGE_URI = imageReturnedIntent.getData();

InputStream image_stream = getContentResolver().openInputStream(IMAGE_URI);

Bitmap bitmap= BitmapFactory.decodeStream(image_stream );



Intent photoPicker = new Intent(Intent.ACTION_PICK);
photoPickerIntent.setType("image/*");
startActivityForResult(photoPickerIntent, REGUEST_CODE); 

得到结果

Uri IMAGE_URI = imageReturnedIntent.getData();
InputStream image_stream = getContentResolver().openInputStream(IMAGE_URI);
Bitmap bitmap= BitmapFactory.decodeStream(getContentResolver().openInputStream(IMAGE_URI));
my_img_view.setImageBitmap(bitmap)
另一答案

您尝试传递的位图有多大?你能复制/粘贴你得到的错误信息吗?

应用程序崩溃的一个可能原因是,您可以在主内存中从一个活动传递到另一个活动的数据的大小上限。我相信最大数据大约1-2 MB,具体取决于硬件和操作系统版本,但我找不到参考。

以上是关于将URI转换为位图的问题(2014):的主要内容,如果未能解决你的问题,请参考以下文章

Xamarin 安卓。将字节数组转换为位图。 Skia 解码器返回 false

WPF - 将位图转换为 ImageSource

如何在两个片段之间传递位图? (我正在使用 Android 导航组件)

如何从Android片段中的相机获取图像

Android:从位图转换为 Byte[] OutOfMemory 错误

结合两个代码片段?将用户输入的 Youtube url 转换为嵌入 url,然后将 iframe src 替换为转换后的 url