簡體   English   中英

在活動之間傳遞圖像

[英]Pass image between activities

按按鈕拍照時我有活動

我也在“布局”中顯示了這張照片。

我需要在另一個活動中顯示它

這是代碼

 protected override void OnActivityResult(int requestCode, Result resultCode, Intent data)
    {
        base.OnActivityResult(requestCode, resultCode, data);
        Intent mediaScanIntent = new Intent(Intent.ActionMediaScannerScanFile);
        Uri contentUri = Uri.FromFile(App._file);
        mediaScanIntent.SetData(contentUri);
        SendBroadcast(mediaScanIntent);
        int height = Resources.DisplayMetrics.HeightPixels;
        int width = _imageView.Height;
        App.bitmap = App._file.Path.LoadAndResizeBitmap(width, height);
        if (App.bitmap != null)
        {
            _imageView.SetImageBitmap(App.bitmap);
            App.bitmap = null;
        }

        // Dispose of the Java side bitmap.
        GC.Collect();
    }

    protected override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);

        surname_from_activity = Intent.GetStringExtra("Surname");
        inn_from_activity = Intent.GetStringExtra("INN");
        System.Console.WriteLine(surname_from_activity);
        SetContentView(Resource.Layout.qrandphotolayout);
        ImageView qr = FindViewById<ImageView>(Resource.Id.qrimage);

        if (IsThereAnAppToTakePictures())
         {
            CreateDirectoryForPictures();
            Button button = FindViewById<Button>(Resource.Id.photobutton);
            _imageView = FindViewById<ImageView>(Resource.Id.photo);
            button.Click += TakeAPicture;
         }

        Button next = FindViewById<Button>(Resource.Id.sync);
        next.Click += delegate {
            var intent = new Intent(this, typeof(Badge));
            intent.PutExtra("Surname", surname_from_activity);
            intent.PutExtra("INN", inn_from_activity);
            StartActivity(intent);
        };
    }

   private void CreateDirectoryForPictures()
         {
             App._dir = new File(
                 Environment.GetExternalStoragePublicDirectory(
                     Environment.DirectoryPictures), "CameraAppDemo");
             if (!App._dir.Exists())
             {
                 App._dir.Mkdirs();
             }
         }

         private bool IsThereAnAppToTakePictures()
         {
             Intent intent = new Intent(MediaStore.ActionImageCapture);
             IList<ResolveInfo> availableActivities =
                 PackageManager.QueryIntentActivities(intent, PackageInfoFlags.MatchDefaultOnly);
             return availableActivities != null && availableActivities.Count > 0;
         }

         private void TakeAPicture(object sender, EventArgs eventArgs)
         {
             Intent intent = new Intent(MediaStore.ActionImageCapture);
             App._file = new File(App._dir, String.Format(surname_from_activity + inn_from_activity, Guid.NewGuid()));
             intent.PutExtra(MediaStore.ExtraOutput, Uri.FromFile(App._file));
             StartActivityForResult(intent,0);
         }
    }

我需要將圖像傳遞到另一個活動並在ImageView中顯示

我該怎么做?

非常感謝

可能性

  • 您可以在ActivityB中創建靜態屬性,並且在從ActivityA調用ActivityB之前,應將imageView / URI傳遞給創建的屬性。

  • 您可以將保存圖像傳遞到文件夾temp(ActivityB)中,並在ActivityB中獲取此圖像。

您傳遞帶有意圖/捆綁的圖像,因為它太重了

發件人活動

Intent intent = new Intent(this, TwoActivity.class);
Bitmap bitmap; 
ByteArrayOutputStream bs = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 50, bs);
i.putExtra("byte", bs.toByteArray());
startActivity(i);

接收者活動

if(getIntent().hasExtra("byte")) {
ImageView imv= new ImageView(this);
Bitmap bitmap = BitmapFactory.decodeByteArray(
        getIntent().getByteArrayExtra("byte"),0,getIntent().getByteArrayExtra("byte").length);        
imv.setImageBitmap(bitmap);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM