qq_42514040 2024-01-03 23:32 采纳率: 0%
浏览 36
已结题

Unity控制佳能实时画面,如何解决抛出异常?

关于 Unity控制佳能单反拍照及数据获取。
Unity控制佳能实时画面。
我发现在Editor里面运行 没有任何问题,
但是一旦打包出PC端,运行exe会在:

 //create stream to image
      unsafe
       {
          Debug.Log("888");
          ums = new UnmanagedMemoryStream((byte*)jpgPointer.ToPointer(), (long)length , (long)length , FileAccess.Read);
          Debug.Log("999");
       }
     Debug.Log("555===" + jpgPointer);
     Debug.Log("5555===" + length );
     TextureBitmap = new Bitmap(ums, true);
     Debug.Log("666");
     ms = new MemoryStream();
     Debug.Log("777");
    TextureBitmap.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
     Debug.Log("给图片赋值 "+ TextureBitmap.Size);
    TextureBytes = ms.GetBuffer();  
     Debug.Log("图片流开始!");
    //fire the LiveViewUpdated event with the live view image stream
    if (LiveViewUpdated != null) LiveViewUpdated(ums);
   ums.Close();

代码运行至:
TextureBitmap = new Bitmap(ums, true);
这一段 抛出以下异常

img

  • 写回答

18条回答

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-01-03 23:33
    关注
    获得0.90元问题酬金

    引自免费微信小程序:皆我百晓生

    问题分析: 根据异常信息,可以看出是关于System.Drawing的异常,具体是在使用Bitmap类的构造函数时出错。可能是因为在PC端运行时,系统环境与Unity Editor中不同导致的。

    解决方案:

    1. 确保在PC端打包时,已正确安装.NET Framework并配置好相关环境。
    2. 尝试以下修改:
      • 检查TextureBytes是否为null,如果是,将TextureBitmap的构造函数改为不使用stream参数的重载构造函数。
      • 将Bitmap的构造函数改为使用Image.FromStream方法。 修改后的代码如下:
    TextureBitmap = (TextureBytes != null) ? new Bitmap(ums, true) : new Bitmap(Image.FromStream(ms));
    
    1. 如果以上方法仍无效,可能是由于Unity与System.Drawing命名空间不兼容导致的。可以考虑使用其他第三方库来处理图片,例如Unity自带的Texture2D类、或者使用外部库如OpenCV等。

    希望能帮到你!

    评论

报告相同问题?

问题事件

  • 系统已结题 1月11日
  • 创建了问题 1月3日

悬赏问题

  • ¥500 把面具戴到人脸上,请大家贡献智慧
  • ¥15 任意一个散点图自己下载其js脚本文件并做成独立的案例页面,不要作在线的,要离线状态。
  • ¥15 各位 帮我看看如何写代码,打出来的图形要和如下图呈现的一样,急
  • ¥30 c#打开word开启修订并实时显示批注
  • ¥15 如何解决ldsc的这条报错/index error
  • ¥15 VS2022+WDK驱动开发环境
  • ¥30 关于#java#的问题,请各位专家解答!
  • ¥30 vue+element根据数据循环生成多个table,如何实现最后一列 平均分合并
  • ¥20 pcf8563时钟芯片不启振
  • ¥20 pip2.40更新pip2.43时报错