Объявление
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 | Вызывается после копирования фотографии в целевую текстуру. |
Описание
Асинхронно захватывает фото с веб-камеры и сохраняет его на диск.
Этот метод можно использовать двумя способами. Вы можете использовать этот метод для захвата фотографии с веб-камеры непосредственно в память процессора. Затем вы можете применить данные изображения к текстуре для использования в Unity или передать данные изображения внешнему плагину. При захвате фотографии непосредственно в память вам также будет предоставлена пространственная информация, которая позволит вам узнать, где в пространстве было сделано изображение. Вы также можете записать фотографию прямо на диск в формате png или jpg.
МетаданныеEXIF будут закодированы в захваченное изображение при сохранении изображения в формате JPEG. Вы можете сохранить захваченное изображение в формате JPEG при использовании пиксельных форматов BGRA32 и NV12. Вы можете сохранить захваченное изображение только в формате PNG при использовании формата пикселей BGRA32.
В этом примере будет получено изображение с веб-камеры и сохранено на диск.
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);
}
}