Saltar al contenido

¿Puedo tomar una foto en Unity usando la cámara del dispositivo?

Nuestro grupo de especialistas pasados varios días de investigación y de recopilar de datos, dieron con los datos necesarios, esperamos que te sea de utilidad en tu proyecto.

Solución:

Sí, esto es posible. Querrá ver la funcionalidad WebCamTexture.

Creas una WebCamTexture y llamas a su función Play() que inicia la cámara. WebCamTexture, como cualquier textura, le permite obtener los píxeles a través de una llamada GetPixels(). Esto le permite tomar una instantánea cuando lo desee y puede guardarla en un Texture2D. Una llamada a EncodeToPNG() y la posterior escritura en el archivo deberían llevarlo allí.

Tenga en cuenta que el código a continuación es una redacción rápida basada en la documentación. No lo he probado. Es posible que deba seleccionar un dispositivo correcto si hay más de uno disponible.

using UnityEngine;
using System.Collections;
using System.IO;

public class WebCamPhotoCamera : MonoBehaviour 

    WebCamTexture webCamTexture;

    void Start() 
    
        webCamTexture = new WebCamTexture();
        GetComponent().material.mainTexture = webCamTexture; //Add Mesh Renderer to the GameObject to which this script is attached to
        webCamTexture.Play();
    

    IEnumerator TakePhoto()  // Start this Coroutine on some button click
    

    // NOTE - you almost certainly have to do this here:

     yield return new WaitForEndOfFrame(); 

    // it's a rare case where the Unity doco is pretty clear,
    // http://docs.unity3d.com/ScriptReference/WaitForEndOfFrame.html
    // be sure to scroll down to the SECOND long example on that doco page 

        Texture2D photo = new Texture2D(webCamTexture.width, webCamTexture.height);
        photo.SetPixels(webCamTexture.GetPixels());
        photo.Apply();

        //Encode to a PNG
        byte[] bytes = photo.EncodeToPNG();
        //Write out the PNG. Of course you have to substitute your_path for something sensible
        File.WriteAllBytes(your_path + "photo.png", bytes);
    

Para aquellos que intentan que la cámara reproduzca la transmisión en vivo, así es como logré lograrlo. Primero, edité la respuesta de Bart para que la textura se asignara en Actualizar en lugar de solo en Inicio:

void Start()

    webCamTexture = new WebCamTexture();
    webCamTexture.Play();


void Update()

    GetComponent().texture = webCamTexture;

Luego adjunté el script a un GameObject con un componente RawImage. Puede crear uno fácilmente haciendo clic derecho -> UI -> RawImage en la jerarquía en el editor de Unity (esto requiere Unity 4.6 y superior). Ejecutarlo debería mostrar una transmisión en vivo de la cámara en su vista. Al escribir estas líneas, Unity 5 admite el uso de cámaras web en la edición personal gratuita de Unity 5.

Espero que esto ayude a cualquiera que busque una buena manera de capturar imágenes de cámara en vivo en Unity.

Es posible. Te recomiendo mucho que mires WebcamTexture Unity API. Tiene algunas funciones útiles:

  1. GetPixel(): devuelve el color del píxel en las coordenadas (x, y).
  2. GetPixels(): obtiene un bloque de colores de píxeles.
  3. GetPixels32(): devuelve los datos de píxeles en formato sin procesar.
  4. MarkNonReadable() — Marca WebCamTexture como ilegible
  5. Pause() — Pausa la cámara.
  6. Reproducir () — Inicia la cámara.
  7. Stop() — Detiene la cámara.

Recuerda que puedes optar por la opción de agregar una reseña si encontraste tu enigma en el momento correcto.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *