# PhotoCapture

> Captures a photo from the web camera and stores it in memory or on disk.

## Definition

* **Type:** Class
* **Namespace:** [UnityEngine.Windows.WebCam](/engine/6000.3/script-reference/unityengine/windows/webcam.md)
* **Assembly:** UnityEngine.CoreModule
* **Implements:** [IDisposable](https://learn.microsoft.com/dotnet/api/system.idisposable)

```csharp
public class PhotoCapture : IDisposable
```

## Remarks

Demonstrates how to take a photo using the PhotoCapture functionality and display it on a Unity GameObject.

## Examples

```csharp
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
    void Start()
    {
        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 our target texture
        photoCaptureFrame.UploadImageDataToTexture(targetTexture);

        // Create a gameobject that we can apply our texture to
        GameObject quad = GameObject.CreatePrimitive(PrimitiveType.Quad);
        Renderer quadRenderer = quad.GetComponent<Renderer>() as Renderer;
        quadRenderer.material = new Material(Shader.Find("Unlit/Texture"));

        quad.transform.parent = this.transform;
        quad.transform.localPosition = new Vector3(0.0f, 0.0f, 3.0f);

        quadRenderer.material.SetTexture("_MainTex", targetTexture);

        // Deactivate our camera
        photoCaptureObject.StopPhotoModeAsync(OnStoppedPhotoMode);
    }

    void OnStoppedPhotoMode(PhotoCapture.PhotoCaptureResult result)
    {
        // Shutdown our photo capture resource
        photoCaptureObject.Dispose();
        photoCaptureObject = null;
    }
}
```

## Static Properties

| Property                                                                                                                | Description                                                         |
| ----------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------- |
| [SupportedResolutions](/engine/6000.3/script-reference/unityengine/windows/webcam/photocapture/supportedresolutions.md) | A list of all the supported device resolutions for taking pictures. |

## Methods

| Method                                                                                                                                                        | Description                                                               |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------- |
| [Dispose](/engine/6000.3/script-reference/unityengine/windows/webcam/photocapture/dispose.md)                                                                 | Dispose must be called to shutdown the PhotoCapture instance.             |
| [GetUnsafePointerToVideoDeviceController](/engine/6000.3/script-reference/unityengine/windows/webcam/photocapture/getunsafepointertovideodevicecontroller.md) | Provides a COM pointer to the native IVideoDeviceController.              |
| [StartPhotoModeAsync](/engine/6000.3/script-reference/unityengine/windows/webcam/photocapture/startphotomodeasync.md)                                         | Asynchronously starts photo mode.                                         |
| [StopPhotoModeAsync](/engine/6000.3/script-reference/unityengine/windows/webcam/photocapture/stopphotomodeasync.md)                                           | Asynchronously stops photo mode.                                          |
| [TakePhotoAsync](/engine/6000.3/script-reference/unityengine/windows/webcam/photocapture/takephotoasync.md)                                                   | Asynchronously captures a photo from the web camera and saves it to disk. |

## Static Methods

| Method                                                                                                | Description                                                                                     |
| ----------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- |
| [CreateAsync](/engine/6000.3/script-reference/unityengine/windows/webcam/photocapture/createasync.md) | Asynchronously creates an instance of a PhotoCapture object that can be used to capture photos. |

## Structs

| Struct                                                                                                                           | Description                                                                         |
| -------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- |
| [PhotoCapture.PhotoCaptureResult](/engine/6000.3/script-reference/unityengine/windows/webcam/photocapture/photocaptureresult.md) | A data container that contains the result information of a photo capture operation. |

## Enums

| Enum                                                                                                                           | Description                                 |
| ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------- |
| [PhotoCapture.CaptureResultType](/engine/6000.3/script-reference/unityengine/windows/webcam/photocapture/captureresulttype.md) | Contains the result of the capture request. |

## Delegates

| Delegate                                                                                                                                                     | Description                                            |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------ |
| [PhotoCapture.OnCapturedToDiskCallback](/engine/6000.3/script-reference/unityengine/windows/webcam/photocapture/oncapturedtodiskcallback.md)                 | Called when a photo has been saved to the file system. |
| [PhotoCapture.OnCapturedToMemoryCallback](/engine/6000.3/script-reference/unityengine/windows/webcam/photocapture/oncapturedtomemorycallback.md)             | Called when a photo has been captured to memory.       |
| [PhotoCapture.OnCaptureResourceCreatedCallback](/engine/6000.3/script-reference/unityengine/windows/webcam/photocapture/oncaptureresourcecreatedcallback.md) | Called when a PhotoCapture resource has been created.  |
| [PhotoCapture.OnPhotoModeStartedCallback](/engine/6000.3/script-reference/unityengine/windows/webcam/photocapture/onphotomodestartedcallback.md)             | Called when photo mode has been started.               |
| [PhotoCapture.OnPhotoModeStoppedCallback](/engine/6000.3/script-reference/unityengine/windows/webcam/photocapture/onphotomodestoppedcallback.md)             | Called when photo mode has been stopped.               |
