Hello everyone.

We have decided to phase out the Mixed Reality Forums over the next few months in favor of other ways to connect with us.

The first way we want to connect with you is our mixed reality developer program, which you can sign up for at https://aka.ms/IWantMR.

The plan between now and the beginning of May is to clean up old, unanswered questions that are no longer relevant. The forums will remain open and usable.

On May 1st we will be locking the forums to new posts and replies. They will remain available for another three months for the purposes of searching them, and then they will be closed altogether on August 1st.

So, where does that leave our awesome community to ask questions? Well, there are a few places we want to engage with you. For technical questions, please use Stack Overflow, and tag your questions using either hololens or windows-mixed-reality. If you want to join in discussions, please do so in the HoloDevelopers Slack, which you can join by going to https://aka.ms/holodevelopers. And always feel free to hit us up on Twitter @MxdRealityDev.

The IEnumerator sub-function function does return to the main function in the IEnumerator.

elahemerelahemer
edited June 15 in Questions And Answers

Hi All
I have a project where I use only voice command to perform some different function and one of them is to take a photo using Hololens .So I use the StartCoroutine(photoshoot()); function to call the IEnumerator photoshoot(). The IEnumerator photoshoot() call the TakePhotosnap();.
It takes the photo perfectly but I have issue after taking the photo it does not go back to IEnumerator.

It stops the code and can not perform any other function.

As you can see in my code ( I put some numbers to help me explain the function )
I call StartCoroutine(photoshoot()); line 11 and in IEnumerator photoshoot() called the TakePhotosnap(); line 12 and it performs taking photo till line 13 Debug.Log("we finish taking photo successfully "); and then stop. It should go to line 14 in IEnumerator photoshoot().
Please what is wrong with my code. and is there any other way to solve it please .
Please help me.My deadline is very soon.
Regards,

Here is some of my code


private void Takephoto()
{
// this function is to call to take a photo and save it in a special folder

    Debug.Log("Take Photo function call is started");
   StartCoroutine(photoshoot());   11
    Debug.Log("Take Photo for Hololens");
}

IEnumerator photoshoot()
{

    Debug.Log(" The taking photo coroutine is started ");
    yield return new WaitForEndOfFrame();
    Debug.Log("Take Photo");      
   TakePhotosnap();       12  
   Debug.Log("Finish taking photo");       14
    yield return new WaitForEndOfFrame();
    GameObject.Find("Cube").transform.localPosition = new Vector3(Random.Range(-1, 1), 0, Random.Range(1, 3));
    GameObject.Find("Cube").SetActive(true);

}

private void TakePhotosnap()
{
    Debug.Log("TakePhoto Call StartPhotoModeAsync () method to start the photo mode");
    Debug.Log("snap pic taken");

    PhotoCapture.CreateAsync(false, OnPhotoCaptureCreated);
}
void OnPhotoCaptureCreated(PhotoCapture captureObject)
{
    //Store objects, configure shooting parameters and start shooting mode.
    Debug.Log("Start taking photo calling function");

    photoCaptureObject = captureObject;
    Debug.Log("set camera parameters");

    Resolution cameraResolution = PhotoCapture.SupportedResolutions.OrderByDescending((res) => res.width * res.height).First();

    CameraParameters c = new CameraParameters();
    ///  c= CameraParameters
    c.hologramOpacity = 1.0f;
    c.cameraResolutionWidth = cameraResolution.width;
    c.cameraResolutionHeight = cameraResolution.height;
    c.pixelFormat = CapturePixelFormat.BGRA32;
    Debug.Log("camera parameters  finish");

    captureObject.StartPhotoModeAsync(c, OnPhotoModeStarted);
}

private void OnPhotoModeStarted(PhotoCapture.PhotoCaptureResult result)
{
    if (result.success)
    {
        //string filename = string.Format(@"CapturedImage{0}_n.jpg", Time.time);
        string filename = string.Format(@"alc.jpg", Time.time);
        Debug.Log("FileName: =" + filename);
        string filePath = System.IO.Path.Combine(Application.persistentDataPath, filename);
        Debug.Log("filePath: =" + filePath);

        /////
        string targetPath = @"C: \Users\ABC\Pictures\Camera Roll";
        string destFile = System.IO.Path.Combine(targetPath, filename);

        Debug.Log("destFile: =" + destFile);
        if (!System.IO.File.Exists(filePath))
        {
            //System.IO.File.Create(filePath);
            System.IO.File.Create(filePath).Dispose();
        }
        // https://blog.csdn.net/Lee_gc/java/article/details/79919042
        Debug.Log("filePath filePath: =" + filePath);

        string filePath2 = System.IO.Path.Combine(Application.dataPath, filename);
        Debug.Log("filePath2: =" + filePath2);

        Debug.Log("finish to set photo file path and name");

        //photoCaptureObject.TakePhotoAsync(filePath, PhotoCaptureFileOutputFormat.JPG, OnCapturedPhotoToDisk);          
        Debug.LogError("Saved That Image Somewhere" + "FileName: =" + filename + " FilePath: = " + filePath + " FilePath2: = " + filePath2);

        Debug.Log("finish to copy photo to new directory");

        Debug.Log("finish photo);
        photoCaptureObject.TakePhotoAsync(filePath, PhotoCaptureFileOutputFormat.JPG, OnCapturedPhotoToDisk);

        Debug.Log("we finish taking photo successfuly "); 13

    }
    else
    {
        Debug.LogError("Unable to start photo mode!");
    }
}
// clean up
void OnStoppedPhotoMode(PhotoCapture.PhotoCaptureResult result)
{
    Debug.Log("result=" + result);

    photoCaptureObject.Dispose();
    photoCaptureObject = null;
}

void OnCapturedPhotoToDisk(PhotoCapture.PhotoCaptureResult result)
{

    if (result.success)
    {
        Debug.Log("Saved Photo to disk!");
        photoCaptureObject.StopPhotoModeAsync(OnStoppedPhotoMode);
    }
    else
    {
        Debug.Log("Failed to save Photo to disk");
    }

}

}

Answers

Sign In or Register to comment.