ImageTransmissionConfig.cs 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. using UnityEngine;
  2. using System;
  3. namespace LightGlue.Unity.Config
  4. {
  5. /// <summary>
  6. /// 图像传输配置参数
  7. /// 根据协议说明_V1.0_20250303定义
  8. /// </summary>
  9. [System.Serializable]
  10. public class ImageTransmissionConfig
  11. {
  12. [Header("图像参数")]
  13. [Tooltip("图片分辨率选择(硬件分辨率枚举:QQVGA/QVGA/VGA/SVGA/XGA/HD/SXGA/UXGA)")]
  14. public ImageResolution resolution = ImageResolution.QVGA_320x240;
  15. [Tooltip("图片质量 (0-60,硬件直接使用该值,十进制输入,内部按十六进制发送)")]
  16. [Range(0, 60)]
  17. public int quality = 20;
  18. [Header("传输参数")]
  19. [Tooltip("上报时间间隔 (毫秒)")]
  20. [Min(0)]
  21. public int reportIntervalMs = 10;
  22. [Tooltip("开启图片传输开关")]
  23. public bool enableImageTransmission = true;
  24. /// <summary>
  25. /// 获取分辨率的宽度
  26. /// </summary>
  27. public int GetWidth()
  28. {
  29. return resolution switch
  30. {
  31. ImageResolution.QQVGA_160x120 => 160,
  32. ImageResolution.QVGA_320x240 => 320,
  33. ImageResolution.VGA_640x480 => 640,
  34. ImageResolution.SVGA_800x600 => 800,
  35. ImageResolution.XGA_1024x768 => 1024,
  36. ImageResolution.HD_1280x720 => 1280,
  37. ImageResolution.SXGA_1280x1024 => 1280,
  38. ImageResolution.UXGA_1600x1200 => 1600,
  39. _ => 640
  40. };
  41. }
  42. /// <summary>
  43. /// 获取分辨率的高度
  44. /// </summary>
  45. public int GetHeight()
  46. {
  47. return resolution switch
  48. {
  49. ImageResolution.QQVGA_160x120 => 120,
  50. ImageResolution.QVGA_320x240 => 240,
  51. ImageResolution.VGA_640x480 => 480,
  52. ImageResolution.SVGA_800x600 => 600,
  53. ImageResolution.XGA_1024x768 => 768,
  54. ImageResolution.HD_1280x720 => 720,
  55. ImageResolution.SXGA_1280x1024 => 1024,
  56. ImageResolution.UXGA_1600x1200 => 1200,
  57. _ => 480
  58. };
  59. }
  60. /// <summary>
  61. /// 获取分辨率字符串 (格式: "宽度x高度")
  62. /// </summary>
  63. public string GetResolutionString()
  64. {
  65. return $"{GetWidth()}x{GetHeight()}";
  66. }
  67. /// <summary>
  68. /// 转换为硬件协议分辨率枚举值(十六进制)
  69. /// 硬件分辨率枚举:
  70. /// 1-QQVGA: 160X120
  71. /// 6-QVGA: 320X240
  72. /// 10-VGA: 640X480
  73. /// 11-SVGA: 800X600
  74. /// 12-XGA: 1024X768
  75. /// 13-HD: 1280x720
  76. /// 14-SXGA: 1280X1024
  77. /// 15-UXGA: 1600X1200
  78. /// </summary>
  79. public byte GetHardwareResolutionCode()
  80. {
  81. // 映射Unity分辨率到硬件分辨率枚举值
  82. return resolution switch
  83. {
  84. ImageResolution.QQVGA_160x120 => 0x01, // 1-QQVGA: 160X120
  85. ImageResolution.QVGA_320x240 => 0x06, // 6-QVGA: 320X240
  86. ImageResolution.VGA_640x480 => 0x0A, // 10-VGA: 640X480
  87. ImageResolution.SVGA_800x600 => 0x0B, // 11-SVGA: 800X600
  88. ImageResolution.XGA_1024x768 => 0x0C, // 12-XGA: 1024X768
  89. ImageResolution.HD_1280x720 => 0x0D, // 13-HD:1280x720
  90. ImageResolution.SXGA_1280x1024 => 0x0E, // 14-SXGA: 1280X1024
  91. ImageResolution.UXGA_1600x1200 => 0x0F, // 15-UXGA: 1600X1200
  92. _ => 0x0A // 默认VGA
  93. };
  94. }
  95. /// <summary>
  96. /// 将质量值(0-100)转换为硬件清晰度值(0-63,十六进制)
  97. /// 硬件质量范围:0-63
  98. /// </summary>
  99. public byte GetHardwareQuality()
  100. {
  101. // UI中直接使用0-63,与硬件保持一致
  102. return (byte)Mathf.Clamp(quality, 0, 63);
  103. }
  104. }
  105. /// <summary>
  106. /// 图片分辨率选项(与硬件分辨率枚举一一对应)
  107. /// 1-QQVGA: 160X120
  108. /// 6-QVGA: 320X240
  109. /// 10-VGA:640X480
  110. /// 11-SVGA: 800X600
  111. /// 12-XGA: 1024X768
  112. /// 13-HD:1280x720
  113. /// 14-SXGA: 1280X1024
  114. /// 15-UXGA: 1600X1200
  115. /// </summary>
  116. public enum ImageResolution
  117. {
  118. QQVGA_160x120 = 0,
  119. QVGA_320x240 = 1,
  120. VGA_640x480 = 2,
  121. SVGA_800x600 = 3,
  122. XGA_1024x768 = 4,
  123. HD_1280x720 = 5,
  124. SXGA_1280x1024 = 6,
  125. UXGA_1600x1200 = 7
  126. }
  127. }