Vuforia 获取照相机图像

有时候想获取照相机图像做特殊操作的时候下面这个代码有用。下面代码也是参考修改来的,为了降低大家检索成本我就复制过来了。
https://library.vuforia.com/articles/Solution/Working-with-the-Camera.html#How-To-Access-the-Camera-Image-in-Unity

	public  PIXEL_FORMAT mPixelFormat = PIXEL_FORMAT.UNKNOWN_FORMAT;
	private bool mAccessCameraImage = true;
	private bool mFormatRegistered = false;
	void Start()
	{
    
    
#if UNITY_EDITOR
		mPixelFormat = PIXEL_FORMAT.GRAYSCALE; // Need Grayscale for Editor
#else
        mPixelFormat = PIXEL_FORMAT.RGB888; // Use RGB888 for mobile
#endif

		// Register Vuforia life-cycle callbacks:
		VuforiaARController.Instance.RegisterVuforiaStartedCallback(OnVuforiaStarted);
		VuforiaARController.Instance.RegisterTrackablesUpdatedCallback(OnTrackablesUpdated);
		VuforiaARController.Instance.RegisterOnPauseCallback(OnPause);
	}
	public void OnVuforiaStarted()

	{
    
    
		// Try register camera image format
		if (CameraDevice.Instance.SetFrameFormat(mPixelFormat, true))
		{
    
    
			Debug.Log("Successfully registered pixel format " + mPixelFormat.ToString());
			mFormatRegistered = true;
		}
		else
		{
    
    
			Debug.LogError(
				"\nFailed to register pixel format: " + mPixelFormat.ToString() +
				"\nThe format may be unsupported by your device." +
				"\nConsider using a different pixel format.\n");
			mFormatRegistered = false;
		}
	}

	/// 
	/// Called each time the Vuforia state is updated
	/// 
	void OnTrackablesUpdated()
	{
    
    
		if (mFormatRegistered)
		{
    
    
			if (mAccessCameraImage)
			{
    
    
				Vuforia.Image image = CameraDevice.Instance.GetCameraImage(mPixelFormat);
				if (image != null)
				{
    
    
				
					Texture2D texture2D = new Texture2D(image.Width,image.Height);
					image.CopyToTexture(texture2D);
				}
			}
		}
	}
	/// 
	/// Called when app is paused / resumed
	/// 
	void OnPause(bool paused)
	{
    
    
		if (paused)
		{
    
    
			Debug.Log("App was paused");
			UnregisterFormat();
		}
		else
		{
    
    
			Debug.Log("App was resumed");
			RegisterFormat();
		}
	}
	/// 
	/// Register the camera pixel format
	/// 
	void RegisterFormat()
	{
    
    
		if (CameraDevice.Instance.SetFrameFormat(mPixelFormat, true))
		{
    
    
			Debug.Log("Successfully registered camera pixel format " + mPixelFormat.ToString());
			mFormatRegistered = true;
		}
		else
		{
    
    
			Debug.LogError("Failed to register camera pixel format " + mPixelFormat.ToString());
			mFormatRegistered = false;
		}
	}
	/// 
	/// Unregister the camera pixel format (e.g. call this when app is paused)
	/// 
	void UnregisterFormat()
	{
    
    
		Debug.Log("Unregistering camera pixel format " + mPixelFormat.ToString());
		CameraDevice.Instance.SetFrameFormat(mPixelFormat, false);
		mFormatRegistered = false;
	}


猜你喜欢

转载自blog.csdn.net/qq_33547099/article/details/115084279