Сделайте несколько фотографий с помощью PhotoCapture Unity C # - PullRequest
0 голосов
/ 01 апреля 2019

У меня есть сценарий, который должен быть в состоянии сделать более одной фотографии.Я использую PhotoCapture и получаю ошибку, из-за которой невозможно сделать вторую фотографию.Я получаю сообщение об ошибке «Значение не может быть нулевым» в строке photoCaptureObject.StartPhotoModeAsync(cameraParameters, result =>, но я не понимаю, почему это так.,Строка if (photoCaptureObject == null) return; также подтверждает, что photoCaptureObject не является нулевым.

PhotoCapture photoCaptureObject = null;
Texture2D targetTexture = null;
public string path = "";
CameraParameters cameraParameters = new CameraParameters();

private void Awake()
{
    var cameraResolution = PhotoCapture.SupportedResolutions.OrderByDescending((res) => res.width * res.height).First();
    targetTexture = new Texture2D(cameraResolution.width, cameraResolution.height);

    // Create a PhotoCapture object
    PhotoCapture.CreateAsync(false, captureObject =>
    {
        photoCaptureObject = captureObject;
        cameraParameters.hologramOpacity = 0.0f;
        cameraParameters.cameraResolutionWidth = cameraResolution.width;
        cameraParameters.cameraResolutionHeight = cameraResolution.height;
        cameraParameters.pixelFormat = CapturePixelFormat.BGRA32;
    });
}

private void Update()
{
    // if not initialized yet don't take input
    if (photoCaptureObject == null) return;

    if (Input.GetKeyDown(KeyCode.K) || Input.GetKeyDown("k"))
    {
        Debug.Log("k was pressed");

        VuforiaBehaviour.Instance.gameObject.SetActive(false);

        // Activate the camera
        photoCaptureObject.StartPhotoModeAsync(cameraParameters, result =>
        {
            if (result.success)
            {
                // Take a picture
                photoCaptureObject.TakePhotoAsync(OnCapturedPhotoToMemory);
            }
            else
            {
                Debug.LogError("Couldn't start photo mode!", this);
            }
        });
    }
}

Между ними есть некоторый код, который изменяет сделанную фотографию и так далее, но я не думаю, что этот код является частью проблемы.

private void OnStoppedPhotoMode(PhotoCapture.PhotoCaptureResult result)
{
    // Shutdown the photo capture resource
    VuforiaBehaviour.Instance.gameObject.SetActive(true);
    photoCaptureObject.Dispose();
    //photoCaptureObject = null;
    Debug.Log("Photomode stopped");
}

Так что еще может быть нулевым?Это StartPhotoModeAsync как-то?Как я могу решить эту проблему?

Спасибо!

1 Ответ

0 голосов
/ 01 апреля 2019

Хорошо, теперь я понимаю, благодаря комментарию Хенрикс.

Unity специально говорит это о StartPhotoModeAsync:

Только один экземпляр PhotoCapture может запустить режим фото в любой момент времени.

Я сосредоточился на предложении, сказав, что всегда следует использовать PhotoCapture.StopPhotoModeAsync, потому что включение PhotoCaptureMode требует больше энергии, поэтому я никогда не думал о том, что экземпляр не запустится снова после его остановки.

Теперь у меня есть только TakePhotoAsync в обновлении при нажатии клавиши, и я не останавливаю PhotoMode из-за того, что приложение, которое я создаю, всегда должно быть способно захватывать фотографии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...