Unity 2D图像识别 动态添加相片到图像库 AR Tracked Image
把图像加载到base64,然后用Texture2D加载,再添加到图像库。
private Dictionary<string, GameObject> mPrefabs = new Dictionary<string, GameObject>();
void Start()
{
mPrefabs.Add("Dragen", Resources.Load("DragenBox") as GameObject);
//加载Resources目录下的组件
mPrefabs.Add("Cube", Resources.Load("CubeBox") as GameObject);
StartCoroutine(initRuntimeImage());
btnCapture = GameObject.Find("btnCapture").GetComponent<Button>();
btnCapture.onClick.AddListener(OnBtnCaptureClick);
}
/// <summary>
/// 自定义截屏功能,截屏按钮点击触发
/// </summary>
public void OnBtnCaptureClick()
{
//应用中代码处理
StartCoroutine(OnScreenShot());
}
/// <summary>
/// 使用协程进行截屏添加到图像库
/// </summary>
/// <returns></returns>
IEnumerator OnScreenShot()
{
ScreenShotCount ;
yield return new WaitForEndOfFrame(); //等到该帧渲染结束再开始截屏
DebugLog.Log("OnScreenShot");
try {
//生成一个Texture2D (参数为:宽,高,纹理,是否使用映射)
Texture2D tTexture2D = new Texture2D(Screen.width, Screen.height, TextureFormat.RGB24, false);
//读取Texture2D到本身上
tTexture2D.ReadPixels(new Rect(0, 0, Screen.width, Screen.height), 0, 0);
//图片应用一下
tTexture2D.Apply();
if (ImgTrackedmanager.referenceLibrary is MutableRuntimeReferenceImageLibrary mutableLibrary)
{
try
{
TestState = mutableLibrary.ScheduleAddImageWithValidationJob(tTexture2D, "ScreenShot" ScreenShotCount, 0.1f);
DebugLog.Log("Adding runtime img " TestState.status.ToString() "--" TestState.jobHandle.IsCompleted.ToString());
isAddingImage = true;
}
catch (InvalidOperationException e)
{
DebugLog.Log($"AddImage Error {e.Message}");
}
}
}
catch (Exception e)
{
DebugLog.Log("error :" e.Message);
}
}
/// <summary>
/// 运行时添加图片库
/// </summary>
/// <returns></returns>
IEnumerator initRuntimeImage()
{
DebugLog.Log("initRuntimeImage wait Coroutine");
yield return null;
mPrefabs.Add("Sphere", Resources.Load("SphereBox") as GameObject);
string base64 = ""; //图像base64
AddImage(base64, "Sphere");
}
void AddImage(string base64, string name)
{
if (ImgTrackedmanager.referenceLibrary is MutableRuntimeReferenceImageLibrary mutableLibrary)
{
try
{
Texture2D texture2D = Base64StringToImage(base64); ;
TestState = mutableLibrary.ScheduleAddImageWithValidationJob(texture2D, name, 0.1f);
Debug.Log("Adding runtime img " TestState.status.ToString() "--" TestState.jobHandle.IsCompleted.ToString());
}
catch (InvalidOperationException e)
{
Debug.Log($"AddImage Error {e.Message}");
}
}
}
void OnTrackedImagesChanged(ARTrackedImagesChangedEventArgs eventArgs)
{
foreach (var trackedImage in eventArgs.added)
{
//用协程来处理
StartCoroutine(OnImagesChanged(trackedImage));
}
}
IEnumerator OnImagesChanged(ARTrackedImage referenceImage)
{
while (referenceImage.trackingState == TrackingState.None) //防止该对象不是tracking状态,下面获取到的坐标会是0,0,0
{
yield return new WaitForSeconds(0.1f);
Debug.Log($"trackingState: " referenceImage.trackingState.ToString());
}
Debug.Log($"OnImagesChanged: " referenceImage.referenceImage.name ", trackingState:" referenceImage.trackingState);
Debug.Log("location:(" referenceImage.transform.position.x "," referenceImage.transform.position.y "," referenceImage.transform.position.z ")");
Instantiate(mPrefabs[referenceImage.referenceImage.name], referenceImage.transform.position, referenceImage.transform.rotation);
}
/// <summary>
/// base64编码的文本 转为Texture2D材质
/// </summary>
/// <param name="basestr">base64字符串</param>
/// <returns>转换后的Bitmap对象</returns>
public static Texture2D Base64StringToImage(string basestr)
{
Texture2D t2d = new Texture2D(1, 1);
try
{
byte[] arr = Convert.FromBase64String(basestr);
t2d.LoadImage(arr);
Debug.Log("转换成功");
}
catch
{
Debug.Log("转换失败");
}
return t2d;
}
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhgfhagb
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01