PhotoCapture.TakePhotoAsync
Declaration
public void TakePhotoAsync(string filename, Windows.WebCam.PhotoCaptureFileOutputFormat fileOutputFormat, Windows.WebCam.PhotoCapture.OnCapturedToDiskCallback onCapturedPhotoToDiskCallback);public void TakePhotoAsync(Windows.WebCam.PhotoCapture.OnCapturedToMemoryCallback onCapturedPhotoToMemoryCallback);Параметры
| Параметр | Описание |
|---|---|
| имя файла | Место, где должна быть сохранена фотография. Имя файла должно заканчиваться на расширение png или jpg. |
| fileOutputFormat | Формат кодировки, который должен использоваться. |
| onCapturedPhotoToDiskCallback | Вызывается после сохранения фотографии на диск. |
| onCapturedPhotoToMemoryCallback | Вызывается после того, как фотография была скопирована в текстуру назначения. |
Описание
Асинхронно захватывает фотографию с веб-камеры и сохраняет ее на диск.
Этот метод может быть использован двумя способами. Вы можете использовать этот метод для записи фотографии с веб-камеры непосредственно в память CPU. Затем вы можете применить данные изображения к текстуре для использования в Unity или передать данные изображения внешнему плагину. При записи фотографии непосредственно в память, вы также получите пространственную информацию, которая позволит вам знать, где изображение было сделано пространственно. Вы также можете записать фотографию непосредственно на диск как png или jpg.
EXIF метаданные будут закодированы в запечатленное изображение при сохранении изображения в формате JPEG. Вы можете сохранить запечатленное изображение в формате JPEG при использовании пиксельных форматов BGRA32 и NV12. Вы можете сохранить запечатленное изображение только как PNG при использовании пиксельного формата BGRA32.
В этом примере будет записано изображение из веб-камеры Camera и сохранено на диск.
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); } }