Как получить путь к файлу изображения в Camera2Basic API? - PullRequest
0 голосов
/ 23 января 2019

это должно быть глупый вопрос, но, пожалуйста, помогите мне. Как мы можем получить путь к файлу изображения в camera2basic api и отобразить изображение на изображении другого действия? Я пытался получить «Абсолютный путь» mFile в проекте, но ничего не получил. Поскольку Camera2 api относительно сложен для понимания для меня. Пожалуйста, помогите мне.

public override void OnActivityCreated(Bundle savedInstanceState)
    {
        base.OnActivityCreated(savedInstanceState);
        mFile = new Java.IO.File(Activity.GetExternalFilesDir(null), "pic.jpg");
        mCaptureCallback = new CameraCaptureListener(this);
        mOnImageAvailableListener = new ImageAvailableListener(this, mFile);

    }

когда мы нажимаем кнопку, это вызывает takepicture (); у которого есть lockfocus ();

 private void LockFocus()
    {
        try
        {
            // This is how to tell the camera to lock focus.

            mPreviewRequestBuilder.Set(CaptureRequest.ControlAfTrigger, (int)ControlAFTrigger.Start);
            // Tell #mCaptureCallback to wait for the lock.
            mState = STATE_WAITING_LOCK;
            mCaptureSession.Capture(mPreviewRequestBuilder.Build(), mCaptureCallback,
                    mBackgroundHandler);

        }
        catch (CameraAccessException e)
        {
            e.PrintStackTrace();
        }
    }

У меня есть showCapturePhoto, которая получает изображение из ImageAvailableListener

using Android.Media;
using Java.IO;
using Java.Lang;
using Java.Nio;
using Android.Util;

namespace Camera2Basic.Listeners
{
    public class ImageAvailableListener : Java.Lang.Object, 
ImageReader.IOnImageAvailableListener
{
    private readonly File file;
    private  Camera2BasicFragment owner;


    public ImageAvailableListener(Camera2BasicFragment fragment, File 
file)
    {
        if (fragment == null)
            throw new System.ArgumentNullException("fragment");
        if (file == null)
            throw new System.ArgumentNullException("file");

        owner = fragment;
        this.file = file;
    }


    //public File File { get; private set; }
    //public Camera2BasicFragment Owner { get; private set; }

    public void OnImageAvailable(ImageReader reader)
    {
        owner.mBackgroundHandler.Post(new ImageSaver(reader.AcquireNextImage(), file));

    }

    // Saves a JPEG {@link Image} into the specified {@link File}.
    private class ImageSaver : Java.Lang.Object, IRunnable
    {
        // The JPEG image
        private Image mImage;

        // The file we save the image into.
        private File mFile;

        public ImageSaver(Image image, File file)
        {
            if (image == null)
                throw new System.ArgumentNullException("image");
            if (file == null)
                throw new System.ArgumentNullException("file");

            mImage = image;
            mFile = file;
        }

        public void Run()
        {

            ByteBuffer buffer = mImage.GetPlanes()[0].Buffer;
            byte[] bytes = new byte[buffer.Remaining()];
            buffer.Get(bytes);
            using (var output = new FileOutputStream(mFile))
            {
                try
                {
                    output.Write(bytes);
                }
                catch (IOException e)
                {
                    e.PrintStackTrace();
                }
                finally
                {
                    mImage.Close();
                }
            }
            Camera2BasicFragment.showCapturedPhoto(mImage);

        }

    }


}

} ShowcapturePhoto

 public static void showCapturedPhoto(Image img)
    {
        ByteBuffer buffer;
        byte[] bytes;

        MemoryStream memStream = new MemoryStream();

            buffer = img.GetPlanes()[0].Buffer;
            bytes = new byte[buffer.Capacity()];
            buffer.Get(bytes);


        Activity activity= new Activity();

     Intent showPhoto = new Intent(activity, typeof(RetryOK));

    showPhoto.PutExtra("savedImg", bytes);
    showPhoto.PutExtra("zoomAmount", 1.7f / 1.4f);
    showPhoto.PutExtra("focusDistance", -1.0f);


       activity.StartActivity(typeof(RetryOK));


}
...