java - 如何快速地将位图从一个 Activity 传递到另一个 Activity ?

标签 java android android-intent android-activity bitmap

我正在尝试将位图从一个 Activity 传递到另一个 Activity ,我尝试了多种解决方案,但它们不够快。

目前我面临这个问题:当我单击“下一个”按钮时,它会卡住 2 秒,然后移动到下一个 Activity,并在 ImageView 中显示正确的位图。

我在 StackoverFlow 中找到了这个解决方案。这是代码:

  Uri imageUri = intent.getParcelableExtra("URI");
        if (imageUri != null) {
            imageView.setImageURI(imageUri);
            try {
                bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), imageUri);
            } catch (IOException e) {
                e.printStackTrace();
            }
        } else {
            Toast.makeText(this, "No image is set to show", Toast.LENGTH_LONG).show();
        }

  btn_next_process.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if (bitmap == null) {
                Toast.makeText(CropResultActivity.this, "Emptyyy", Toast.LENGTH_SHORT).show();
            }
            else {
                try {
                    //Write file
                    String filename = "bitmap.png";
                    FileOutputStream stream = CropResultActivity.this.openFileOutput(filename, Context.MODE_PRIVATE);
                    bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream);

                    //Cleanup
                    stream.close();
                  //  bitmap.recycle();

                    //Pop intent
                    Intent in1 = new Intent(CropResultActivity.this, InputProcessingActivity.class);
                    in1.putExtra("image_data", filename);
                    startActivity(in1);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    });

然后我尝试先将文件保存在工作线程中,当我单击下一步按钮时,我检索它,现在它工作得很快,但我得到了错误的位图。

这是代码:

  Uri imageUri = intent.getParcelableExtra("URI");
        if (imageUri != null) {
            imageView.setImageURI(imageUri);
            try {
                bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), imageUri);

                new Thread() {
                    @Override
                    public void run() {
                        try {
                            //Write file
                            FileOutputStream stream = CropResultActivity.this.openFileOutput(filename, Context.MODE_PRIVATE);
                            bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream);
                            //Cleanup
                            stream.close();
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                    }
                }.run();

            } catch (IOException e) {
                e.printStackTrace();
            }
        } else {
            Toast.makeText(this, "No image is set to show", Toast.LENGTH_LONG).show();
        }

  btn_next_process.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if (bitmap == null) {
                Toast.makeText(CropResultActivity.this, "Empty", Toast.LENGTH_SHORT).show();
            }
            else {
                //Pop intent
                Intent in1 = new Intent(CropResultActivity.this, InputProcessingActivity.class);
                in1.putExtra("image_data", filename);
                startActivity(in1);
            }
        }
    });

在第二个 Activity 中,我以这种方式检索位图:

  private void getIncomingIntent(){
    if(getIntent().hasExtra("image_data")){
        try {
            String filename = getIntent().getStringExtra("image_data");
            FileInputStream is = this.openFileInput(filename);
            imageToProcess = BitmapFactory.decodeStream(is);
            process_detect_edges(imageToProcess);
            is.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

我做错了什么?

最佳答案

只需将图像 uri 传递给下一个 Activity 即可。从其他 Activity 中的 uri 加载。

关于java - 如何快速地将位图从一个 Activity 传递到另一个 Activity ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54828183/

相关文章:

java - 处理文件和数据库插入的最快方法 - Java 多线程

c# - 匿名方法/函数 : a fundamental feature or a violation of OO principles?

java - 如何将 ArrayList<Class> 从一个 Activity 传递到另一个 Activity ?

android - Facebook timeline android 使用 scrollview 还是 listview?

android - 如何使用 Android 从 Intent 打开 Paytm 应用程序?

android - 如何从 whatsapp fileprovider 获取 txt 文件

java - 如果我按一次耳机按钮,android.intent.action.MEDIA_BUTTON 事件会触发两次

java - 是否为线程更新了公共(public)静态变量? (它是线程安全的吗?)

java - 列表迭代器卡住-Java

Android - 增加警报对话框中按钮的大小