android – 活动返回图片

我想在我的活动中返回一个位图,以便其他应用程序可以使用它.

返回文本很清楚.

Intent data = new Intent();
data.putExtra("text1","text.");
data.putExtra("text2","longer text.");
setResult(RESULT_OK,data);

但是如何返回位图?

更多信息:
该活动有几个意图可供想要获取图像的每个人使用.

<intent-filter>
    <action android:name="android.intent.action.GET_CONTENT" />
    <category android:name="android.intent.category.OPENABLE" />
    <category android:name="android.intent.category.DEFAULT" />
    <data android:mimeType="image/*" />
    <data android:mimeType="vnd.android.cursor.dir/image" />
</intent-filter>
<intent-filter>
    <action android:name="android.intent.action.PICK" />
    <category android:name="android.intent.category.DEFAULT" />
    <data android:mimeType="image/*" />
    <data android:mimeType="vnd.android.cursor.dir/image" />
</intent-filter>

编辑:
以下是一个功能解决方案:

public void finish(Bitmap bitmap) {
    try {
        File folder = new File(Environment.getExternalStorageDirectory() + "/Icon Select/");
        if(!folder.exists()) {
            folder.mkdirs();
        }
        File nomediaFile = new File(folder,".nomedia");
        if(!nomediaFile.exists()) {
            nomediaFile.createNewFile();
        }

        FileOutputStream out = new FileOutputStream(Environment.getExternalStorageDirectory() + "/Icon Select/latest.png");
        bitmap.compress(Bitmap.CompressFormat.PNG,90,out);
        File bitmapFile = new File(Environment.getExternalStorageDirectory() + "/Icon Select/latest.png");

        if(bitmapFile.exists()) {
            Intent localIntent = new Intent().setData(Uri.fromFile(bitmapFile));
            setResult(RESULT_OK,localIntent);                
        } else {
            setResult(RESULT_CANCELED);
        }
        super.finish();

    } catch (Exception e) {
        e.printstacktrace();
        Log.d("beewhale","Error writing data");
    }
}

解决方法

虽然我同意Ovidiu Latcu,但您可能会遇到内存问题.

将位图存储到SD卡上的临时位置可能更好.然后从那里访问它. (写入和读取位图到文件).

或者,如果您确实希望将字节数组作为额外内容,则首先将位图压缩为另一种格式,例如Jpeg或类似的,这将再次减少内存问题的变化.

一个简单的8M像素图像,是32MB(4层).这超出了应用程序大多数(如果不是全部)手机的允许内存使用量.

直接存储到存储是内置相机应用程序如何工作以避免此问题.

这是我处理它的代码

public void showCameraScreen(View view) {
    // BUILT IN CAMERA 
    Intent camera = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);   
    camera.putExtra(MediaStore.EXTRA_OUTPUT,Uri.fromFile(getTempFile(this)) );   
    this.startActivityForResult(camera,1);

}   

private File getTempFile(Context context) {
    // it will return /sdcard/MyImage.tmp
    final File path = new File(Environment.getExternalStorageDirectory(),context.getPackageName());
    if (!path.exists()) {
        path.mkdir();
    }
    return new File(path,"MyImage.tmp");
}

@Override
protected void onActivityResult(int requestCode,int resultCode,Intent data) {
    if (requestCode == 1 && resultCode == RESULT_OK) {
        final File file = getTempFile(this);

        byte[] _data = new byte[(int) file.length()];
        try {
            InputStream in = new FileInputStream(file);
            in.read(_data);
            in.close();
            in = null;
            //DO WHAT YOU WANT WITH _data. The byte array of your image.
        } catch (Exception E) {

        }
    }
}

注意:您还需要在被调用的intent上编写代码,这些代码存储到传递的Uri中 – 这里,内置的摄像头api就可以了.

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...