从 PC 端传输图片到 Hololens 显示。

在 Unity 中开发, PC 端的应用可以发布到其它平台,这里只在 unity 工程中运行了测试。

利用 HoloToolKit - Sharing 进行消息传输。

消息处理在 CustomMessages.cs 中定义

先注册发送图片消息的 ID: Img

public enum TestMessageID : byte{Img,Max}

定义发送图片的函数 SendImg(FileStream ImgFs)

这里的图片消息输入是文件流,图片转换为文件流的操作在后文发送方的脚本中。

 public void SendImg(FileStream ImgFs){// If we are connected to a session, broadcast our head infoif (serverConnection != null && serverConnection.IsConnected()){// Create an outgoing network message to contain all the info we want to sendNetworkOutMessage msg = CreateMessage((byte)TestMessageID.Img);try{//开辟一个字节组存文件流byte[] ImgFsSize = new byte[ImgFs.Length];
//读取数据流
BinaryReader strread = new BinaryReader(ImgFs);strread.Read(ImgFsSize, 0, ImgFsSize.Length);
//消息以字节组的形式写入Array
uint bytesize = (uint)ImgFsSize.Length;msg.Write(bytesize);msg.WriteArray(ImgFsSize, bytesize);}
catch (SocketException e){Debug.Log(e.Data.ToString());//关闭文件流ImgFs.Dispose();}// Send the message as a broadcast, which will cause the server to forward it to all other users in the session.serverConnection.Broadcast(msg,MessagePriority.Immediate,MessageReliability.UnreliableSequenced,MessageChannel.Avatar);}}

消息发送方 PC

挂载在图片发送 Button 上的脚本:

//文件名
public string ImgName;
//文件存放路径
public string desPathName;
......
void Start(){//待发送的图片放入 unity 资源文件 Resources 中desPathName = Application.dataPath + "/Resources/" + ImgName;}

注意:文件名 ImgName 在实例化时要 包含后缀(.png ,.jpg 等)。

mySendImg() 为图片发送 Button 的点击响应函数:

    public void mySendImg(){Debug.Log("start to send image: " + desPathName);
//将图片转换为文件流FileStream fs = new FileStream(desPathName,FileMode.OpenOrCreate,FileAccess.Read);
//发送图片消息
CustomMessages.Instance.SendImg(fs);}

消息接收方 Hololens

该脚本挂载在用于显示图片的Cube上:

using HoloToolkit.Sharing;
using HoloToolkit.Sharing.Tests;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEngine;
using System;public class IllustrateImageEvent : MonoBehaviour
{// Use this for initializationvoid Start(){//一开始隐藏显示图片的cubethis.GetComponent<Renderer>().enabled = false;
//接收图片消息CustomMessages.Instance.MessageHandlers[CustomMessages.TestMessageID.Img] = OnImgReceived;}void Update(){}private void OnImgReceived(NetworkInMessage msg){long userID = msg.ReadInt64();
//接收到的array的长度,之后写入要用long bytesSize = msg.ReadInt64();try{         //开辟空间存储图片byte[] bytes = new byte[(uint)bytesSize];//读取数据写入bytesmsg.ReadArray(bytes, (uint)bytesSize);Texture2D tex = new Texture2D(2, 2);//从bytes中读取数据保存到Texture2D  ,如果成功,就显示为cube的textureif (tex.LoadImage(bytes)){GetComponent<Renderer>().enabled = true;GetComponent<Renderer>().material.mainTexture = tex;}else{   //读取不成功,cube显示为红色GetComponent<Renderer>().enabled = true;GetComponent<Renderer>().material.color = Color.red;}}catch (Exception e){Debug.Log(e.Data.ToString());}}
}

总结

1. 关键点是 msg.WriteArray 。

一般利用 socket 进行图片传输是写成 byte 而不是 byte[ ] ,之前一直在尝试把 byte[ ] 装换为 byte,后来发现 HoloToolKit - Sharing 中有读写字节组的方法,注意还需要读写组的长度。

2. 之前尝试 @安小七Go 在《Unity3d使用socket传输图片》中的方法,发现 System.Drawing.dll 只能用于PC平台? 至少发布到 uwp 不可用。

3. UWP 平台 +  socket 传输消息 +[ Hololens + Unity ]  相关:

Building Windows Universal Games with Untiy

Hololens: How to deploy and read data file with app

PC传输图片到Hololens相关推荐

  1. HoloLens 2开发:获取并渲染双手

    前言 最近有新成员加入本团队,为了方便其开发HoloLens1 / HoloLens2,将不定时更新HoloLens相关开发相关内容. 软件需求: HoloLens 1:VS2017 + Unity2 ...

  2. (翻译++)微软Hololens开发教程系列(1): Holograms 100-使用Unity构建第一个全息影像应用

    前言 本系列博文翻译至微软Holograms的官方英文教程,其地址为: https://developer.microsoft.com/en-us/windows/holographic/academ ...

  3. Unity Hololens开发教程

    1 开发工具准备 1,一台安装Windows 10系统的电脑(配置最好高一点) 2,Unity Holograph Preview[1] 3,Visual Studio 2015 and Visual ...

  4. Hololens2-Unity3D开发(一)

    终于开始学习并研究Hololens 2了,希望能坚持下去,写出较为完整了Hololens 2开发专栏 文章目录 搭建实验平台 使用Unity的准备工作 在PC端安装连接Hololens软件 Holol ...

  5. VISP视觉库框架详细解释

    接着上一篇VISP视觉库框架结构与使用入门_冯相文要加油呀!的博客-CSDN博客https://blog.csdn.net/weixin_51229250/article/details/121140 ...

  6. 微软Windows CEO梅尔森跟全体员工告别

    导读 腾讯科技讯,据外媒报道,作为微软大规模重组的一部分,微软将分拆其 Windows 和设备集团,在公司工作了 21 年之久的微软老将.执行副总裁特里-梅尔森(Terry Myerson)将因此离开 ...

  7. HoloLens 2开发:电脑端PC识别Vuforia

    前言 最近有新成员加入本团队,为了方便其开发HoloLens1 / HoloLens2,将不定时更新HoloLens相关开发相关内容. 软件需求: HoloLens 1:VS2017 + Unity2 ...

  8. 吊打Magic Leap,微软HoloLens 2不只为炫技

    近几日网上关于HoloLens 2的话题颇多.Infinite Retina联合创始人,拥有40多万关注者的Robert Scoble发推写道,HoloLens 2一出,Magic Leap就没那么& ...

  9. Hololens开发基础知识

    开发HoloLens全息应用将使用UWP平台,所有的HoloLens应用都是Win10通用应用,所有UWP通用应用都可以在HoloLens上运行.通过Windows 10和Unity这样的中间工具,我 ...

  10. 发力企业级市场,微软Hololens开辟了一条VR新道路

    近日微软Hololens可谓是动作频频,2月份Hololens与BGC Engineering合作,从矿山规划到泥石流建模,该应用程序可帮助BGC Engineering及其客户可视化一个场景并解决工 ...

最新文章

  1. 多个servlet配制方法
  2. mysql 密码重置
  3. WINDOWSPHONE STUDY1:创建一个 Windows Phone 7 下的简单 RSS 阅读器
  4. 简简单单实践ERD Commander2005破解Windows密码
  5. ftp 信息服务器日常维护,Web Ftp Mail服务器的日常管理与维护
  6. JavaScript 学习笔记 之事件
  7. WinCVS与CVSNT简明使用手则
  8. java 企业信息门户 拖拽排版_web中拖拽排序与java后台交互实现
  9. 百度feeds联盟软件测试开发,UI 自动化测试用例整理举例-百度首页
  10. php三维数组转换二维数组,php 三维数组转二维数组(多维数组变合拼二维数组)(foreach循环 数组叠加)...
  11. 手机微信网站开发放弃windows phone的理由
  12. notion自建服务器,最详细的NOTION功能模块列表
  13. IT优秀书籍收集下载
  14. 6.微服务设计 --- 部署
  15. html flex 的高度,html – css:flexbox的最后一行有两倍的高度
  16. 【java】中缀表达式转后缀表达式 java实现
  17. 3D图形学(4):纹理贴图
  18. 观史图馆之《中东列国历代疆域变化 青铜与古典时代》
  19. Dota2 无法连接至steam网络 【已解决】
  20. 3d打开无法下载star.php,下载的3dmax模型打开失败的原因及解决方法

热门文章

  1. PDF处理技巧分享之PDF合并:一键实现几个PDF合并成一个PDF
  2. 软件的接口设计图_重磅!PKPM 结构设计软件V5.1正式发布
  3. 为什么滴滴裁员2000人,被裁员工却像中奖一样开心?...
  4. maven本地资源库设置和参数说明
  5. pkl形式的数据集读取和可视化
  6. Jmeter应用-接口测试
  7. 基于Python的geopandas库处理矢量几何的教程
  8. 35岁以上程序员求职没市场?互联网大厂100道Android面试题助你冲关金三银四!终局之战
  9. Microsoft store 无法联网,显示Microsoft Store需要联网,你似乎没有联网
  10. HTML CSS JS 网页设计作业「我的家乡吉林」