版本: Unity 6 (6000.0)
语言English
  • C#

PhotoCapture.TakePhotoAsync

建议修改

成功!

感谢您帮助我们提高 Unity 文档的质量。虽然我们无法接受所有提交,但我们确实会阅读用户提出的每项修改建议,并在适用的情况下进行更新。

关闭

提交失败

由于某些原因,您的修改建议无法提交。请<a>稍后再试</a>。感谢您抽出时间帮助我们提高 Unity 文档的质量。

关闭

取消

声明

public void TakePhotoAsync(string filename, Windows.WebCam.PhotoCaptureFileOutputFormat fileOutputFormat, Windows.WebCam.PhotoCapture.OnCapturedToDiskCallback onCapturedPhotoToDiskCallback);

声明

public void TakePhotoAsync(Windows.WebCam.PhotoCapture.OnCapturedToMemoryCallback onCapturedPhotoToMemoryCallback);

参数

filename 照片应保存到的位置。文件名必须以 png 或 jpg 文件扩展名结尾。
fileOutputFormat 应使用的编码格式。
onCapturedPhotoToDiskCallback 照片保存到磁盘后调用。
onCapturedPhotoToMemoryCallback 照片复制到目标纹理后调用。

描述

异步捕获来自网络摄像头的照片并将其保存到磁盘。

此方法可以使用两种方式。您可以使用此方法将网络摄像头中的照片直接捕获到 CPU 内存中。然后,您可以将图像数据应用到纹理以在 Unity 中使用,或将图像数据传递给外部插件。当直接捕获到内存中的照片时,您还将获得空间信息,以便您可以知道图像在空间上是在哪里拍摄的。您还可以将照片直接捕获到磁盘,以 png 或 jpg 格式保存。

将图像以 JPEG 格式保存时,将把EXIF 元数据编码到捕获的图像中。使用 BGRA32 和 NV12 像素格式时,可以将捕获的图像保存为 JPEG 格式。仅当使用 BGRA32 像素格式时,才能将捕获的图像保存为 PNG。

此示例将从网络摄像头捕获图像并将其保存到磁盘。

using UnityEngine;
using System.Collections;
using System.Linq;
using UnityEngine.Windows.WebCam;

public class PhotoCaptureToDiskExample : MonoBehaviour { PhotoCapture photoCaptureObject = null;

static readonly int TotalImagesToCapture = 3; int capturedImageCount = 0;

// Use this for initialization void Start() { Resolution cameraResolution = PhotoCapture.SupportedResolutions.OrderByDescending((res) => res.width * res.height).First(); Texture2D targetTexture = new Texture2D(cameraResolution.width, cameraResolution.height);

PhotoCapture.CreateAsync(false, delegate(PhotoCapture captureObject) { Debug.Log("Created PhotoCapture Object"); photoCaptureObject = captureObject;

CameraParameters c = new CameraParameters(); c.hologramOpacity = 0.0f; c.cameraResolutionWidth = targetTexture.width; c.cameraResolutionHeight = targetTexture.height; c.pixelFormat = CapturePixelFormat.BGRA32;

captureObject.StartPhotoModeAsync(c, delegate(PhotoCapture.PhotoCaptureResult result) { Debug.Log("Started Photo Capture Mode"); TakePicture(); }); }); }

void OnCapturedPhotoToDisk(PhotoCapture.PhotoCaptureResult result) { Debug.Log("Saved Picture To Disk!");

if (capturedImageCount < TotalImagesToCapture) { TakePicture(); } else { photoCaptureObject.StopPhotoModeAsync(OnStoppedPhotoMode); } }

void TakePicture() { capturedImageCount++; Debug.Log(string.Format("Taking Picture ({0}/{1})...", capturedImageCount, TotalImagesToCapture)); string filename = string.Format(@"CapturedImage{0}.jpg", capturedImageCount); string filePath = System.IO.Path.Combine(Application.persistentDataPath, filename);

photoCaptureObject.TakePhotoAsync(filePath, PhotoCaptureFileOutputFormat.JPG, OnCapturedPhotoToDisk); }

void OnStoppedPhotoMode(PhotoCapture.PhotoCaptureResult result) { photoCaptureObject.Dispose(); photoCaptureObject = null;

Debug.Log("Captured images have been saved at the following path."); Debug.Log(Application.persistentDataPath); } }