Capture
1 TopicUnity3d & MRTK open Hololens 2 camera on button click and display the image in the Untiy scene after
As described in the title I have a scene wich contains a button. I attached a script with the code you see below to a ```PhotoManager``` GameObject. The button runs ```TakePhoto()``` from the script below when the button gets pressed. I expected that when you click the button, the HoloLens will open the camera and you can take a picture. Once the picture has been taken, the user should see it in the scene. However, nothing happens when you click the button... When i run the scene in unity and press the button in the game window i'm getting this error: ```InvalidOperationException: Sequence contains no elements```. (I dont have a webcam connected to my computer) The code is form the https://docs.unity3d.com/2018.4/Documentation/Manual/windowsholographic-photocapture.html. using UnityEngine; using System.Collections; using System.Linq; using UnityEngine.Windows.WebCam; public class PhotoCaptureExample : MonoBehaviour { PhotoCapture photoCaptureObject = null; Texture2D targetTexture = null; // Use this for initialization public void TakePhoto() { Resolution cameraResolution = PhotoCapture.SupportedResolutions.OrderByDescending((res) => res.width * res.height).First(); targetTexture = new Texture2D(cameraResolution.width, cameraResolution.height); // Create a PhotoCapture object PhotoCapture.CreateAsync(false, delegate (PhotoCapture captureObject) { photoCaptureObject = captureObject; CameraParameters cameraParameters = new CameraParameters(); cameraParameters.hologramOpacity = 0.0f; cameraParameters.cameraResolutionWidth = cameraResolution.width; cameraParameters.cameraResolutionHeight = cameraResolution.height; cameraParameters.pixelFormat = CapturePixelFormat.BGRA32; // Activate the camera photoCaptureObject.StartPhotoModeAsync(cameraParameters, delegate (PhotoCapture.PhotoCaptureResult result) { // Take a picture photoCaptureObject.TakePhotoAsync(OnCapturedPhotoToMemory); }); }); } void OnCapturedPhotoToMemory(PhotoCapture.PhotoCaptureResult result, PhotoCaptureFrame photoCaptureFrame) { // Copy the raw image data into the target texture photoCaptureFrame.UploadImageDataToTexture(targetTexture); // Create a GameObject to which the texture can be applied GameObject quad = GameObject.CreatePrimitive(PrimitiveType.Quad); Renderer quadRenderer = quad.GetComponent<Renderer>() as Renderer; quadRenderer.material = new Material(Shader.Find("Custom/Unlit/UnlitTexture")); quad.transform.parent = this.transform; quad.transform.localPosition = new Vector3(0.0f, 0.0f, 3.0f); quadRenderer.material.SetTexture("_MainTex", targetTexture); // Deactivate the camera photoCaptureObject.StopPhotoModeAsync(OnStoppedPhotoMode); } void OnStoppedPhotoMode(PhotoCapture.PhotoCaptureResult result) { // Shutdown the photo capture resource photoCaptureObject.Dispose(); photoCaptureObject = null; } }1.9KViews0likes0Comments