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); } }