GalaxyCamera.cs 44 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962
  1. using GxIAPINET;
  2. using System.ComponentModel;
  3. using Microsoft.Win32;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Diagnostics;
  7. using System.Drawing;
  8. using System.Drawing.Imaging;
  9. using System.Runtime.InteropServices;
  10. using System.Text.RegularExpressions;
  11. using TeamAAS.Camera.Images;
  12. using TeamAAS.Camera.Models;
  13. using TeamAAS.Camera.Attributes;
  14. using TeamAAS.Camera.Enums;
  15. namespace TeamAAS.Camera.Cameras
  16. {
  17. /// <summary>
  18. /// 大恒相机(GxIAPINET SDK)
  19. /// </summary>
  20. [Camera("Galaxy", "大恒相机")]
  21. public class GalaxyCamera : CameraBase
  22. {
  23. #region 字段
  24. static IGXFactory m_objIGXFactory = null;
  25. IGXDevice m_objIGXDevice = null;
  26. IGXStream m_objIGXStream = null;
  27. static List<IGXDeviceInfo> m_listIGXDeviceInfo = new List<IGXDeviceInfo>();
  28. IGXFeatureControl m_objIGXFeatureControl = null;
  29. IGXFeatureControl m_objIGXStreamFeatureControl = null;
  30. IntPtr m_pOutBuffer = IntPtr.Zero;
  31. IntPtr m_pBitmapInfo = IntPtr.Zero;
  32. bool m_bIsColor = false;
  33. byte[] m_byMonoBuffer = null;
  34. byte[] m_byColorBuffer = null;
  35. int m_nWidth = 0;
  36. int m_nHeight = 0;
  37. IGXImageFormatConvert m_objImageFormatConvert = null;
  38. CWin32Bitmaps.BITMAPINFO m_objBitmapInfo = new CWin32Bitmaps.BITMAPINFO();
  39. private bool IsHaveCamera = false;
  40. #endregion
  41. [Browsable(false)]
  42. public override string CameraBrand => "大恒相机";
  43. public GalaxyCamera(Guid id, int index, string name, string serialNumber, string cameraIp, bool isFindByIp)
  44. : base(id, index, name, serialNumber, cameraIp, isFindByIp)
  45. {
  46. var list = GetDevices();
  47. foreach (var device in list)
  48. {
  49. if (device.CameraType == CameraType.GIGE)
  50. {
  51. if (IsFindByIp)
  52. {
  53. if (device.CameraIp == CameraIp)
  54. {
  55. IsHaveCamera = true;
  56. ManufacturerName = device.ManufacturerName;
  57. ModelName = device.Model;
  58. SerialNumber = device.SerialNumber;
  59. CameraType = CameraType.GIGE;
  60. break;
  61. }
  62. }
  63. else
  64. {
  65. if (device.SerialNumber == serialNumber)
  66. {
  67. IsHaveCamera = true;
  68. ManufacturerName = device.ManufacturerName;
  69. ModelName = device.Model;
  70. SerialNumber = device.SerialNumber;
  71. CameraType = CameraType.GIGE;
  72. break;
  73. }
  74. }
  75. }
  76. else
  77. {
  78. if (device.SerialNumber == serialNumber)
  79. {
  80. IsHaveCamera = true;
  81. ManufacturerName = device.ManufacturerName;
  82. ModelName = device.Model;
  83. SerialNumber = device.SerialNumber;
  84. CameraType = CameraType.GIGE;
  85. break;
  86. }
  87. }
  88. }
  89. IsConnected = false;
  90. }
  91. #region 设备发现
  92. public static CameraInfo[] GetDevices()
  93. {
  94. m_objIGXFactory = IGXFactory.GetInstance();
  95. m_objIGXFactory.Init();
  96. List<CameraInfo> cameras = new List<CameraInfo>();
  97. if (!CheckSoftwareInstalled().isInstalled)
  98. {
  99. return cameras.ToArray();
  100. }
  101. m_listIGXDeviceInfo.Clear();
  102. if (null != m_objIGXFactory)
  103. {
  104. m_objIGXFactory.UpdateAllDeviceList(200, m_listIGXDeviceInfo);
  105. }
  106. if (m_listIGXDeviceInfo.Count <= 0)
  107. {
  108. return cameras.ToArray();
  109. }
  110. for (int i = 0; i < m_listIGXDeviceInfo.Count; i++)
  111. {
  112. var deviceType = m_listIGXDeviceInfo[i].GetDeviceClass();
  113. if (deviceType == GX_DEVICE_CLASS_LIST.GX_DEVICE_CLASS_GEV)
  114. {
  115. cameras.Add(new CameraInfo()
  116. {
  117. CameraNo = i + 1,
  118. CameraName = m_listIGXDeviceInfo[i].GetDisplayName(),
  119. CameraBrand = "大恒相机",
  120. CameraType = CameraType.GIGE,
  121. ManufacturerName = m_listIGXDeviceInfo[i].GetVendorName(),
  122. Model = m_listIGXDeviceInfo[i].GetModelName(),
  123. SerialNumber = m_listIGXDeviceInfo[i].GetSN(),
  124. CameraIp = m_listIGXDeviceInfo[i].GetIP(),
  125. IsFindByIp = true,
  126. });
  127. }
  128. else if (deviceType == GX_DEVICE_CLASS_LIST.GX_DEVICE_CLASS_USB2 || deviceType == GX_DEVICE_CLASS_LIST.GX_DEVICE_CLASS_U3V)
  129. {
  130. cameras.Add(new CameraInfo()
  131. {
  132. CameraNo = i + 1,
  133. CameraName = m_listIGXDeviceInfo[i].GetDisplayName(),
  134. CameraBrand = "大恒相机",
  135. CameraType = CameraType.USB,
  136. ManufacturerName = m_listIGXDeviceInfo[i].GetVendorName(),
  137. Model = m_listIGXDeviceInfo[i].GetModelName(),
  138. SerialNumber = m_listIGXDeviceInfo[i].GetSN(),
  139. CameraIp = "",
  140. });
  141. }
  142. else if (deviceType == GX_DEVICE_CLASS_LIST.GX_DEVICE_CLASS_UNKNOWN)
  143. {
  144. cameras.Add(new CameraInfo()
  145. {
  146. CameraNo = i + 1,
  147. CameraName = m_listIGXDeviceInfo[i].GetDisplayName(),
  148. CameraBrand = "大恒相机",
  149. CameraType = CameraType.Unknown,
  150. ManufacturerName = m_listIGXDeviceInfo[i].GetVendorName(),
  151. Model = m_listIGXDeviceInfo[i].GetModelName(),
  152. SerialNumber = m_listIGXDeviceInfo[i].GetSN(),
  153. CameraIp = "",
  154. });
  155. }
  156. }
  157. return cameras.ToArray();
  158. }
  159. public static (bool isInstalled, string version) CheckSoftwareInstalled()
  160. {
  161. string softwareName = "Galaxy";
  162. string softwareVersion = "2.4.2504";
  163. string[] registryPaths = new[]
  164. {
  165. @"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall",
  166. @"SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall"
  167. };
  168. foreach (var path in registryPaths)
  169. {
  170. using (RegistryKey key = Registry.LocalMachine.OpenSubKey(path))
  171. {
  172. if (key == null) continue;
  173. foreach (string subKeyName in key.GetSubKeyNames())
  174. {
  175. using (RegistryKey subKey = key.OpenSubKey(subKeyName))
  176. {
  177. string displayName = subKey?.GetValue("DisplayName")?.ToString();
  178. if (displayName != null && displayName.Contains(softwareName))
  179. {
  180. string version = subKey.GetValue("DisplayName")?.ToString();
  181. var match = Regex.Match(version, @"\d+(?:\.\d+)+");
  182. if (match.Success)
  183. {
  184. version = match.Value;
  185. }
  186. else
  187. {
  188. continue;
  189. }
  190. Version v1 = new Version(version);
  191. Version v2 = new Version(softwareVersion);
  192. if (v1 >= v2)
  193. {
  194. return (true, version);
  195. }
  196. else
  197. {
  198. return (false, version);
  199. }
  200. }
  201. }
  202. }
  203. }
  204. }
  205. return (false, "");
  206. }
  207. #endregion
  208. #region SDK 实现
  209. public override bool OpenDevice()
  210. {
  211. using (WriteLockScope())
  212. {
  213. try
  214. {
  215. var list = GetDevices();
  216. foreach (var device in list)
  217. {
  218. if (device.SerialNumber == SerialNumber)
  219. {
  220. IsHaveCamera = true;
  221. break;
  222. }
  223. }
  224. if (!IsHaveCamera)
  225. {
  226. return false;
  227. }
  228. if (null != m_objIGXDevice)
  229. {
  230. m_objIGXDevice.Close();
  231. m_objIGXDevice = null;
  232. }
  233. m_objIGXDevice = m_objIGXFactory.OpenDeviceBySN(SerialNumber, GxIAPINET.GX_ACCESS_MODE.GX_ACCESS_EXCLUSIVE);
  234. m_objIGXFeatureControl = m_objIGXDevice.GetRemoteFeatureControl();
  235. if (null != m_objIGXDevice)
  236. {
  237. m_objIGXStream = m_objIGXDevice.OpenStream(0);
  238. m_objIGXStreamFeatureControl = m_objIGXStream.GetFeatureControl();
  239. }
  240. GX_DEVICE_CLASS_LIST objDeviceClass = m_objIGXDevice.GetDeviceInfo().GetDeviceClass();
  241. if (GX_DEVICE_CLASS_LIST.GX_DEVICE_CLASS_GEV == objDeviceClass)
  242. {
  243. if (true == m_objIGXFeatureControl.IsImplemented("GevSCPSPacketSize"))
  244. {
  245. uint nPacketSize = m_objIGXStream.GetOptimalPacketSize();
  246. m_objIGXFeatureControl.GetIntFeature("GevSCPSPacketSize").SetValue(nPacketSize);
  247. }
  248. }
  249. if (null != m_objIGXFeatureControl)
  250. {
  251. // 按当前触发模式下发(默认连续采集 = TriggerMode Off,与历史硬编码一致)
  252. ApplyTriggerToHardware(TriggerMode);
  253. }
  254. ReleaseBuffer();
  255. GxBitmap();
  256. if (null != m_objIGXStreamFeatureControl)
  257. {
  258. try
  259. {
  260. m_objIGXStreamFeatureControl.GetEnumFeature("StreamBufferHandlingMode").SetValue("OldestFirst");
  261. }
  262. catch (Exception)
  263. {
  264. }
  265. }
  266. if (!IsConnected)
  267. {
  268. OnConnectChanged(true);
  269. }
  270. IsConnected = true;
  271. return IsConnected;
  272. }
  273. catch (Exception ex)
  274. {
  275. ErrorMessage = ex.Message;
  276. IsConnected = false;
  277. return false;
  278. }
  279. }
  280. }
  281. public override void CloseDevice()
  282. {
  283. using (WriteLockScope())
  284. {
  285. try
  286. {
  287. if (null != m_objIGXStream)
  288. {
  289. m_objIGXStream.StopGrab();
  290. m_objIGXStream.UnregisterCaptureCallback();
  291. m_objIGXStream.Close();
  292. m_objIGXStream = null;
  293. m_objIGXStreamFeatureControl = null;
  294. }
  295. if (null != m_objIGXDevice)
  296. {
  297. m_objIGXDevice.Close();
  298. m_objIGXDevice = null;
  299. }
  300. if (null != m_objIGXFactory)
  301. {
  302. m_objIGXFactory.Uninit();
  303. }
  304. }
  305. catch (Exception)
  306. {
  307. }
  308. ReleaseBuffer();
  309. IsConnected = false;
  310. OnConnectChanged(false);
  311. }
  312. }
  313. #region 触发模式
  314. /// <summary>大恒(Galaxy)支持连续/软触发/硬触发(Line0)</summary>
  315. public override IReadOnlyList<CameraTriggerMode> SupportedTriggerModes => FullTriggerModes;
  316. /// <summary>历史行为:OpenDevice 硬编码 TriggerMode=Off,故默认连续采集</summary>
  317. protected override CameraTriggerMode DefaultTriggerMode => CameraTriggerMode.连续采集;
  318. protected override bool ApplyTriggerMode(CameraTriggerMode mode)
  319. {
  320. using (WriteLockScope())
  321. return ApplyTriggerToHardware(mode);
  322. }
  323. /// <summary>
  324. /// 把触发模式下发到大恒 GxIAPINET(GenICam 字符串接口)。
  325. /// 调用方需已持有写锁(OpenDevice/Grab 内部已在锁内;锁可重入)。
  326. /// </summary>
  327. private bool ApplyTriggerToHardware(CameraTriggerMode mode)
  328. {
  329. if (null == m_objIGXFeatureControl) return false;
  330. m_objIGXFeatureControl.GetEnumFeature("AcquisitionMode").SetValue("Continuous");
  331. switch (mode)
  332. {
  333. case CameraTriggerMode.连续采集:
  334. m_objIGXFeatureControl.GetEnumFeature("TriggerMode").SetValue("Off");
  335. return true;
  336. case CameraTriggerMode.软触发:
  337. m_objIGXFeatureControl.GetEnumFeature("TriggerSource").SetValue("Software");
  338. m_objIGXFeatureControl.GetEnumFeature("TriggerMode").SetValue("On");
  339. return true;
  340. case CameraTriggerMode.硬触发上升沿:
  341. case CameraTriggerMode.硬触发下降沿:
  342. m_objIGXFeatureControl.GetEnumFeature("TriggerSource").SetValue("Line0");
  343. m_objIGXFeatureControl.GetEnumFeature("TriggerActivation").SetValue(
  344. mode == CameraTriggerMode.硬触发上升沿 ? "Rising" : "Falling");
  345. m_objIGXFeatureControl.GetEnumFeature("TriggerMode").SetValue("On");
  346. return true;
  347. default: // 跟随相机:不下发,沿用相机自身配置
  348. return true;
  349. }
  350. }
  351. #endregion
  352. public override GenImage Grab()
  353. {
  354. using (WriteLockScope())
  355. {
  356. var sw = Stopwatch.StartNew();
  357. dynamic objIImageData = null;
  358. try
  359. {
  360. if (null == m_objIGXDevice || !IsConnected)
  361. {
  362. ErrorMessage = "相机未连接";
  363. return null;
  364. }
  365. if (null != m_objIGXStream)
  366. {
  367. m_objIGXStream.StartGrab();
  368. }
  369. if (null != m_objIGXFeatureControl)
  370. {
  371. m_objIGXFeatureControl.GetCommandFeature("AcquisitionStart").Execute();
  372. // 仅软触发模式需主动发触发命令;连续采集自由出图,硬触发等外部信号
  373. if (IsSoftwareTrigger)
  374. m_objIGXFeatureControl.GetCommandFeature("TriggerSoftware").Execute();
  375. }
  376. objIImageData = m_objIGXStream.GetImageNoThrow(500);
  377. GX_VALID_BIT_LIST emValidBits = GX_VALID_BIT_LIST.GX_BIT_0_7;
  378. if (null != objIImageData)
  379. {
  380. emValidBits = GetBestValudBit(objIImageData.GetPixelFormat());
  381. if (GX_FRAME_STATUS_LIST.GX_FRAME_STATUS_SUCCESS == objIImageData.GetStatus())
  382. {
  383. if (m_bIsColor)
  384. {
  385. IntPtr pRGB24Buffer = IntPtr.Zero;
  386. if (objIImageData.GetPixelFormat() == GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_BGR8)
  387. {
  388. byte[] byColorBufferTmp = new byte[__GetStride(m_nWidth, m_bIsColor) * m_nHeight];
  389. Marshal.Copy(objIImageData.GetBuffer(), byColorBufferTmp, 0, __GetStride(m_nWidth, m_bIsColor) * m_nHeight);
  390. pRGB24Buffer = objIImageData.GetBuffer();
  391. for (int i = 0; i < m_nHeight; i++)
  392. {
  393. Buffer.BlockCopy(byColorBufferTmp, (m_nHeight - i - 1) * m_nWidth * 3, m_byColorBuffer, i * m_nWidth * 3, m_nWidth * 3);
  394. }
  395. }
  396. else
  397. {
  398. m_objImageFormatConvert.SetDstFormat(GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_BGR8);
  399. UInt64 i64DstBufferize = m_objImageFormatConvert.GetBufferSizeForConversion(objIImageData);
  400. m_objImageFormatConvert.SetValidBits(emValidBits);
  401. m_objImageFormatConvert.Convert(objIImageData, m_pOutBuffer, i64DstBufferize, true);
  402. Marshal.Copy(m_pOutBuffer, m_byColorBuffer, 0, __GetStride(m_nWidth, m_bIsColor) * m_nHeight);
  403. pRGB24Buffer = m_pOutBuffer;
  404. }
  405. Image = GenImage.FromIntPtr(m_nWidth, m_nHeight, PixelType.BGR24, pRGB24Buffer, m_nWidth * 3);
  406. }
  407. else
  408. {
  409. IntPtr pRaw8Buffer = IntPtr.Zero;
  410. if (__IsPixelFormat8(objIImageData.GetPixelFormat()))
  411. {
  412. byte[] byMonoBufferTmp = new byte[__GetStride(m_nWidth, m_bIsColor) * m_nHeight];
  413. Marshal.Copy(objIImageData.GetBuffer(), byMonoBufferTmp, 0, __GetStride(m_nWidth, m_bIsColor) * m_nHeight);
  414. pRaw8Buffer = objIImageData.GetBuffer();
  415. for (int i = 0; i < m_nHeight; i++)
  416. {
  417. Buffer.BlockCopy(byMonoBufferTmp, (m_nHeight - i - 1) * m_nWidth, m_byMonoBuffer, i * m_nWidth, m_nWidth);
  418. }
  419. }
  420. else
  421. {
  422. m_objImageFormatConvert.SetDstFormat(GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_MONO8);
  423. UInt64 i64DstBufferize = m_objImageFormatConvert.GetBufferSizeForConversion(objIImageData);
  424. m_objImageFormatConvert.SetValidBits(emValidBits);
  425. m_objImageFormatConvert.Convert(objIImageData, m_pOutBuffer, i64DstBufferize, true);
  426. Marshal.Copy(m_pOutBuffer, m_byMonoBuffer, 0, __GetStride(m_nWidth, m_bIsColor) * m_nHeight);
  427. pRaw8Buffer = m_pOutBuffer;
  428. }
  429. Image = GenImage.FromIntPtr(m_nWidth, m_nHeight, PixelType.Grey8, pRaw8Buffer, m_nWidth);
  430. }
  431. }
  432. }
  433. if (Image != null)
  434. {
  435. ImageWidth = (uint)Image.Width;
  436. ImageHeight = (uint)Image.Height;
  437. ApplyGammaToImage(Image);
  438. ErrorMessage = "";
  439. TotalTime = sw.Elapsed;
  440. return Image;
  441. }
  442. }
  443. catch (Exception ex)
  444. {
  445. CloseDevice();
  446. OpenDevice();
  447. ErrorMessage = ex.Message;
  448. }
  449. finally
  450. {
  451. if (null != objIImageData)
  452. {
  453. objIImageData.Destroy();
  454. }
  455. }
  456. return null;
  457. }
  458. }
  459. public override bool SetExposureTime(float exposureTime)
  460. {
  461. using (WriteLockScope())
  462. {
  463. try
  464. {
  465. if (m_objIGXFeatureControl != null)
  466. {
  467. m_objIGXFeatureControl.GetFloatFeature("ExposureTime").SetValue(exposureTime);
  468. return true;
  469. }
  470. }
  471. catch { }
  472. return true;
  473. }
  474. }
  475. public override float GetExposureTime()
  476. {
  477. using (ReadLockScope())
  478. {
  479. try
  480. {
  481. if (m_objIGXFeatureControl != null)
  482. {
  483. return (float)m_objIGXFeatureControl.GetFloatFeature("ExposureTime").GetValue();
  484. }
  485. }
  486. catch { }
  487. return 0;
  488. }
  489. }
  490. public override bool SetGain(float gain)
  491. {
  492. using (WriteLockScope())
  493. {
  494. try
  495. {
  496. if (m_objIGXFeatureControl != null)
  497. {
  498. m_objIGXFeatureControl.GetFloatFeature("Gain").SetValue(gain);
  499. return true;
  500. }
  501. }
  502. catch { }
  503. return true;
  504. }
  505. }
  506. public override float GetGain()
  507. {
  508. using (ReadLockScope())
  509. {
  510. try
  511. {
  512. if (m_objIGXFeatureControl != null)
  513. {
  514. return (float)m_objIGXFeatureControl.GetFloatFeature("Gain").GetValue();
  515. }
  516. }
  517. catch { }
  518. return 0;
  519. }
  520. }
  521. public override bool SetGamma(float gamma)
  522. {
  523. using (WriteLockScope())
  524. {
  525. try
  526. {
  527. if (m_objIGXFeatureControl != null && m_objIGXFeatureControl.IsImplemented("Gamma"))
  528. {
  529. m_objIGXFeatureControl.GetFloatFeature("Gamma").SetValue(gamma);
  530. return true;
  531. }
  532. }
  533. catch { }
  534. UpdateGammaSnapshot(gamma);
  535. return true;
  536. }
  537. }
  538. public override float GetGamma()
  539. {
  540. using (ReadLockScope())
  541. {
  542. try
  543. {
  544. if (m_objIGXFeatureControl != null && m_objIGXFeatureControl.IsImplemented("Gamma"))
  545. {
  546. return (float)m_objIGXFeatureControl.GetFloatFeature("Gamma").GetValue();
  547. }
  548. }
  549. catch { }
  550. return Gamma;
  551. }
  552. }
  553. #endregion
  554. #region 辅助方法
  555. public void GxBitmap()
  556. {
  557. m_objImageFormatConvert = m_objIGXFactory.CreateImageFormatConvert();
  558. if (null != m_objIGXDevice)
  559. {
  560. m_nWidth = (int)m_objIGXDevice.GetRemoteFeatureControl().GetIntFeature("Width").GetValue();
  561. m_nHeight = (int)m_objIGXDevice.GetRemoteFeatureControl().GetIntFeature("Height").GetValue();
  562. ImageWidth = (uint)m_nWidth;
  563. ImageHeight = (uint)m_nHeight;
  564. IsSupportColor(ref m_bIsColor);
  565. }
  566. m_byMonoBuffer = new byte[__GetStride(m_nWidth, m_bIsColor) * m_nHeight];
  567. m_byColorBuffer = new byte[__GetStride(m_nWidth, m_bIsColor) * m_nHeight];
  568. m_pOutBuffer = Marshal.AllocCoTaskMem(__GetStride(m_nWidth, m_bIsColor) * m_nHeight);
  569. if (m_bIsColor)
  570. {
  571. m_objBitmapInfo.bmiHeader.biSize = (uint)Marshal.SizeOf(typeof(CWin32Bitmaps.BITMAPINFOHEADER));
  572. m_objBitmapInfo.bmiHeader.biWidth = m_nWidth;
  573. m_objBitmapInfo.bmiHeader.biHeight = m_nHeight;
  574. m_objBitmapInfo.bmiHeader.biPlanes = 1;
  575. m_objBitmapInfo.bmiHeader.biBitCount = 24;
  576. m_objBitmapInfo.bmiHeader.biCompression = 0;
  577. m_objBitmapInfo.bmiHeader.biSizeImage = 0;
  578. m_objBitmapInfo.bmiHeader.biXPelsPerMeter = 0;
  579. m_objBitmapInfo.bmiHeader.biYPelsPerMeter = 0;
  580. m_objBitmapInfo.bmiHeader.biClrUsed = 0;
  581. m_objBitmapInfo.bmiHeader.biClrImportant = 0;
  582. }
  583. else
  584. {
  585. m_objBitmapInfo.bmiHeader.biSize = (uint)Marshal.SizeOf(typeof(CWin32Bitmaps.BITMAPINFOHEADER));
  586. m_objBitmapInfo.bmiHeader.biWidth = m_nWidth;
  587. m_objBitmapInfo.bmiHeader.biHeight = m_nHeight;
  588. m_objBitmapInfo.bmiHeader.biPlanes = 1;
  589. m_objBitmapInfo.bmiHeader.biBitCount = 8;
  590. m_objBitmapInfo.bmiHeader.biCompression = 0;
  591. m_objBitmapInfo.bmiHeader.biSizeImage = 0;
  592. m_objBitmapInfo.bmiHeader.biXPelsPerMeter = 0;
  593. m_objBitmapInfo.bmiHeader.biYPelsPerMeter = 0;
  594. m_objBitmapInfo.bmiHeader.biClrUsed = 0;
  595. m_objBitmapInfo.bmiHeader.biClrImportant = 0;
  596. m_objBitmapInfo.bmiColors = new CWin32Bitmaps.RGBQUAD[256];
  597. for (int i = 0; i < 256; i++)
  598. {
  599. m_objBitmapInfo.bmiColors[i].rgbBlue = (byte)i;
  600. m_objBitmapInfo.bmiColors[i].rgbGreen = (byte)i;
  601. m_objBitmapInfo.bmiColors[i].rgbRed = (byte)i;
  602. m_objBitmapInfo.bmiColors[i].rgbReserved = 0;
  603. }
  604. }
  605. m_pBitmapInfo = Marshal.AllocHGlobal(2048);
  606. Marshal.StructureToPtr(m_objBitmapInfo, m_pBitmapInfo, false);
  607. }
  608. public void ReleaseBuffer()
  609. {
  610. if (m_pOutBuffer != IntPtr.Zero)
  611. {
  612. Marshal.FreeCoTaskMem(m_pOutBuffer);
  613. m_pOutBuffer = IntPtr.Zero;
  614. }
  615. if (m_pBitmapInfo != IntPtr.Zero)
  616. {
  617. Marshal.FreeHGlobal(m_pBitmapInfo);
  618. m_pBitmapInfo = IntPtr.Zero;
  619. }
  620. }
  621. public void IsSupportColor(ref bool bIsColorFilter)
  622. {
  623. bool bIsImplemented = false;
  624. bool bIsMono = false;
  625. string strPixelFormat = "";
  626. uint nPixelFormatValue = 0;
  627. strPixelFormat = m_objIGXDevice.GetRemoteFeatureControl().GetEnumFeature("PixelFormat").GetValue();
  628. if (0 == string.Compare(strPixelFormat, 0, "Mono", 0, 4))
  629. {
  630. bIsMono = true;
  631. }
  632. else
  633. {
  634. bIsMono = false;
  635. }
  636. CDecide.GetConvertPixelFormat(strPixelFormat, ref nPixelFormatValue);
  637. bIsImplemented = CDecide.GetIsGray(nPixelFormatValue);
  638. if ((!bIsMono) && (!bIsImplemented))
  639. {
  640. bIsColorFilter = true;
  641. }
  642. else
  643. {
  644. bIsColorFilter = false;
  645. }
  646. }
  647. private int __GetStride(int nWidth, bool bIsColor)
  648. {
  649. return bIsColor ? nWidth * 3 : nWidth;
  650. }
  651. public GX_VALID_BIT_LIST GetBestValudBit(GX_PIXEL_FORMAT_ENTRY emPixelFormatEntry)
  652. {
  653. GX_VALID_BIT_LIST emValidBits = GX_VALID_BIT_LIST.GX_BIT_0_7;
  654. switch (emPixelFormatEntry)
  655. {
  656. case GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_MONO8:
  657. case GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_BAYER_GR8:
  658. case GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_BAYER_RG8:
  659. case GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_BAYER_GB8:
  660. case GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_BAYER_BG8:
  661. case GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_RGB8:
  662. case GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_BGR8:
  663. case GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_R8:
  664. case GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_G8:
  665. case GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_B8:
  666. emValidBits = GX_VALID_BIT_LIST.GX_BIT_0_7;
  667. break;
  668. case GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_MONO10:
  669. case GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_MONO10_P:
  670. case GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_MONO10_PACKED:
  671. case GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_BAYER_GR10:
  672. case GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_BAYER_RG10:
  673. case GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_BAYER_GB10:
  674. case GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_BAYER_BG10:
  675. case GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_BAYER_BG10_P:
  676. case GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_BAYER_BG10_PACKED:
  677. case GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_BAYER_GB10_P:
  678. case GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_BAYER_GB10_PACKED:
  679. case GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_BAYER_GR10_P:
  680. case GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_BAYER_GR10_PACKED:
  681. case GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_BAYER_RG10_P:
  682. case GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_BAYER_RG10_PACKED:
  683. emValidBits = GX_VALID_BIT_LIST.GX_BIT_2_9;
  684. break;
  685. case GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_MONO12:
  686. case GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_MONO12_P:
  687. case GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_MONO12_PACKED:
  688. case GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_BAYER_GR12:
  689. case GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_BAYER_RG12:
  690. case GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_BAYER_GB12:
  691. case GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_BAYER_BG12:
  692. case GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_BAYER_BG12_P:
  693. case GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_BAYER_BG12_PACKED:
  694. case GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_BAYER_GB12_P:
  695. case GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_BAYER_GB12_PACKED:
  696. case GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_BAYER_GR12_P:
  697. case GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_BAYER_GR12_PACKED:
  698. case GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_BAYER_RG12_P:
  699. case GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_BAYER_RG12_PACKED:
  700. emValidBits = GX_VALID_BIT_LIST.GX_BIT_4_11;
  701. break;
  702. case GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_MONO14:
  703. case GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_BAYER_GR14:
  704. case GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_BAYER_RG14:
  705. case GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_BAYER_GB14:
  706. case GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_BAYER_BG14:
  707. case GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_BAYER_BG14_P:
  708. case GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_BAYER_GB14_P:
  709. case GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_BAYER_GR14_P:
  710. case GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_BAYER_RG14_P:
  711. case GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_MONO14_P:
  712. emValidBits = GX_VALID_BIT_LIST.GX_BIT_6_13;
  713. break;
  714. case GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_MONO16:
  715. case GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_BAYER_GR16:
  716. case GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_BAYER_RG16:
  717. case GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_BAYER_GB16:
  718. case GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_BAYER_BG16:
  719. emValidBits = GX_VALID_BIT_LIST.GX_BIT_8_15;
  720. break;
  721. default:
  722. break;
  723. }
  724. return emValidBits;
  725. }
  726. private bool __IsPixelFormat8(GX_PIXEL_FORMAT_ENTRY emPixelFormatEntry)
  727. {
  728. const uint PIXEL_FORMATE_BIT = 0x00FF0000;
  729. const uint GX_PIXEL_8BIT = 0x00080000;
  730. bool bIsPixelFormat8 = false;
  731. uint uiPixelFormatEntry = (uint)emPixelFormatEntry;
  732. if ((uiPixelFormatEntry & PIXEL_FORMATE_BIT) == GX_PIXEL_8BIT)
  733. {
  734. bIsPixelFormat8 = true;
  735. }
  736. return bIsPixelFormat8;
  737. }
  738. public GenImage ConvertImage(UInt32 nWidth, UInt32 nHeight, IntPtr pImageBuf, GX_PIXEL_FORMAT_ENTRY enPixelType)
  739. {
  740. try
  741. {
  742. if (enPixelType == GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_MONO8)
  743. {
  744. return GenImage.FromIntPtr((int)nWidth, (int)nHeight, PixelType.Grey8, pImageBuf, (int)nWidth);
  745. }
  746. else
  747. {
  748. return GenImage.FromIntPtr((int)nWidth, (int)nHeight, PixelType.BGR24, pImageBuf, (int)nWidth * 3);
  749. }
  750. }
  751. catch (System.Exception)
  752. {
  753. return null;
  754. }
  755. }
  756. #endregion
  757. }
  758. #region Galaxy SDK 辅助类
  759. internal class CWin32Bitmaps
  760. {
  761. [StructLayout(LayoutKind.Sequential)]
  762. public struct BITMAPFILEHEADER
  763. {
  764. public ushort bfType;
  765. public int bfSize;
  766. public ushort bfReserved1;
  767. public ushort bfReserved2;
  768. public uint bfOffBits;
  769. }
  770. [StructLayout(LayoutKind.Sequential)]
  771. public struct BITMAPINFOHEADER
  772. {
  773. public uint biSize;
  774. public int biWidth;
  775. public int biHeight;
  776. public ushort biPlanes;
  777. public ushort biBitCount;
  778. public uint biCompression;
  779. public int biSizeImage;
  780. public int biXPelsPerMeter;
  781. public int biYPelsPerMeter;
  782. public uint biClrUsed;
  783. public uint biClrImportant;
  784. }
  785. [StructLayout(LayoutKind.Sequential)]
  786. public struct RGBQUAD
  787. {
  788. public byte rgbBlue;
  789. public byte rgbGreen;
  790. public byte rgbRed;
  791. public byte rgbReserved;
  792. }
  793. [StructLayout(LayoutKind.Sequential)]
  794. public struct BITMAPINFO
  795. {
  796. public BITMAPINFOHEADER bmiHeader;
  797. [MarshalAs(UnmanagedType.ByValArray, SizeConst = 256)]
  798. public RGBQUAD[] bmiColors;
  799. }
  800. }
  801. internal static class CDecide
  802. {
  803. public const uint GVSP_PIX_MONO = 0x01000000;
  804. public const uint GVSP_PIX_RGB = 0x02000000;
  805. public const uint GVSP_PIX_CUSTOM = 0x80000000;
  806. public const uint GVSP_PIX_COLOR_MASK = 0xFF000000;
  807. public const uint GVSP_PIX_ID_MASK = 0x0000FFFF;
  808. public static bool GetISMono(uint nPixelFormat)
  809. {
  810. return ((GVSP_PIX_COLOR_MASK & nPixelFormat) == GVSP_PIX_MONO);
  811. }
  812. public static bool GetIsBayer(uint nPixelFormat)
  813. {
  814. bool bIsBayer = (((GVSP_PIX_ID_MASK & (uint)GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_BAYER_GR8) <= (GVSP_PIX_ID_MASK & nPixelFormat)
  815. && (GVSP_PIX_ID_MASK & nPixelFormat) <= (GVSP_PIX_ID_MASK & (uint)GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_BAYER_BG12))
  816. || ((GVSP_PIX_ID_MASK & (uint)GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_BAYER_GR14) <= (GVSP_PIX_ID_MASK & nPixelFormat)
  817. && (GVSP_PIX_ID_MASK & nPixelFormat) <= (GVSP_PIX_ID_MASK & (uint)GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_BAYER_BG14))
  818. || ((GVSP_PIX_ID_MASK & (uint)GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_BAYER_GR16) <= (GVSP_PIX_ID_MASK & nPixelFormat)
  819. && (GVSP_PIX_ID_MASK & nPixelFormat) <= (GVSP_PIX_ID_MASK & (uint)GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_BAYER_BG16)));
  820. return bIsBayer;
  821. }
  822. public static bool GetIsRGB(uint nPixelFormat)
  823. {
  824. return ((GVSP_PIX_COLOR_MASK & nPixelFormat) == GVSP_PIX_RGB);
  825. }
  826. public static bool GetIsRGB8(uint nPixelFormat)
  827. {
  828. return ((nPixelFormat == (uint)GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_RGB8)
  829. || (nPixelFormat == (uint)GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_BGR8));
  830. }
  831. public static bool GetIsGray(uint nPixelFormat)
  832. {
  833. return (GetISMono(nPixelFormat)) && (!GetIsBayer(nPixelFormat)) && (!GetIsRGB(nPixelFormat));
  834. }
  835. public static void GetConvertPixelFormat(String strPixelFormat, ref uint nPixelFormatValue)
  836. {
  837. switch (strPixelFormat)
  838. {
  839. case "Mono8": nPixelFormatValue = (uint)GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_MONO8; break;
  840. case "BayerRG8": nPixelFormatValue = (uint)GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_BAYER_RG8; break;
  841. case "BayerGB8": nPixelFormatValue = (uint)GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_BAYER_GB8; break;
  842. case "BayerGR8": nPixelFormatValue = (uint)GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_BAYER_GR8; break;
  843. case "BayerBG8": nPixelFormatValue = (uint)GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_BAYER_BG8; break;
  844. case "RGB8": nPixelFormatValue = (uint)GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_RGB8; break;
  845. case "BGR8": nPixelFormatValue = (uint)GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_BGR8; break;
  846. case "Mono10": nPixelFormatValue = (uint)GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_MONO10; break;
  847. case "Mono10_Packed": nPixelFormatValue = (uint)GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_MONO10_PACKED; break;
  848. case "Mono10_P": nPixelFormatValue = (uint)GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_MONO10_P; break;
  849. case "BayerRG10": nPixelFormatValue = (uint)GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_BAYER_RG10; break;
  850. case "BayerRG10_P": nPixelFormatValue = (uint)GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_BAYER_RG10_P; break;
  851. case "BayerRG10_Packet": nPixelFormatValue = (uint)GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_BAYER_RG10_PACKED; break;
  852. case "BayerGB10": nPixelFormatValue = (uint)GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_BAYER_GB10; break;
  853. case "BayerGB10_P": nPixelFormatValue = (uint)GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_BAYER_GB10_P; break;
  854. case "BayerGB10_Packet": nPixelFormatValue = (uint)GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_BAYER_GB10_PACKED; break;
  855. case "BayerGR10": nPixelFormatValue = (uint)GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_BAYER_GR10; break;
  856. case "BayerGR10_P": nPixelFormatValue = (uint)GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_BAYER_GR10_P; break;
  857. case "BayerGR10_Packet": nPixelFormatValue = (uint)GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_BAYER_GR10_PACKED; break;
  858. case "BayerBG10": nPixelFormatValue = (uint)GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_BAYER_BG10; break;
  859. case "BayerBG10_P": nPixelFormatValue = (uint)GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_BAYER_BG10_P; break;
  860. case "BayerBG10_Packet": nPixelFormatValue = (uint)GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_BAYER_BG10_PACKED; break;
  861. case "Mono12": nPixelFormatValue = (uint)GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_MONO12; break;
  862. case "Mono12_Packed": nPixelFormatValue = (uint)GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_MONO12_PACKED; break;
  863. case "Mono12_P": nPixelFormatValue = (uint)GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_MONO12_P; break;
  864. case "BayerRG12": nPixelFormatValue = (uint)GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_BAYER_RG12; break;
  865. case "BayerRG12_P": nPixelFormatValue = (uint)GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_BAYER_RG12_P; break;
  866. case "BayerRG12_Packet": nPixelFormatValue = (uint)GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_BAYER_RG12_PACKED; break;
  867. case "BayerGB12": nPixelFormatValue = (uint)GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_BAYER_GB12; break;
  868. case "BayerGB12_P": nPixelFormatValue = (uint)GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_BAYER_GB12_P; break;
  869. case "BayerGB12_Packet": nPixelFormatValue = (uint)GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_BAYER_GB12_PACKED; break;
  870. case "BayerGR12": nPixelFormatValue = (uint)GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_BAYER_GR12; break;
  871. case "BayerGR12_P": nPixelFormatValue = (uint)GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_BAYER_GR12_P; break;
  872. case "BayerGR12_Packet": nPixelFormatValue = (uint)GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_BAYER_GR12_PACKED; break;
  873. case "BayerBG12": nPixelFormatValue = (uint)GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_BAYER_BG12; break;
  874. case "BayerBG12_P": nPixelFormatValue = (uint)GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_BAYER_BG12_P; break;
  875. case "BayerBG12_Packet": nPixelFormatValue = (uint)GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_BAYER_BG12_PACKED; break;
  876. case "Mono14": nPixelFormatValue = (uint)GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_MONO14; break;
  877. case "Mono14_P": nPixelFormatValue = (uint)GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_MONO14_P; break;
  878. case "BayerGR14": nPixelFormatValue = (uint)GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_BAYER_GR14; break;
  879. case "BayerRG14": nPixelFormatValue = (uint)GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_BAYER_RG14; break;
  880. case "BayerGB14": nPixelFormatValue = (uint)GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_BAYER_GB14; break;
  881. case "BayerBG14": nPixelFormatValue = (uint)GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_BAYER_BG14; break;
  882. case "BayerGR14_P": nPixelFormatValue = (uint)GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_BAYER_GR14_P; break;
  883. case "BayerRG14_P": nPixelFormatValue = (uint)GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_BAYER_RG14_P; break;
  884. case "BayerGB14_P": nPixelFormatValue = (uint)GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_BAYER_GB14_P; break;
  885. case "BayerBG14_P": nPixelFormatValue = (uint)GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_BAYER_BG14_P; break;
  886. case "Mono16": nPixelFormatValue = (uint)GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_MONO16; break;
  887. case "BayerGR16": nPixelFormatValue = (uint)GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_BAYER_GR16; break;
  888. case "BayerRG16": nPixelFormatValue = (uint)GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_BAYER_RG16; break;
  889. case "BayerGB16": nPixelFormatValue = (uint)GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_BAYER_GB16; break;
  890. case "BayerBG16": nPixelFormatValue = (uint)GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_BAYER_BG16; break;
  891. case "R8": nPixelFormatValue = (uint)GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_R8; break;
  892. case "G8": nPixelFormatValue = (uint)GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_G8; break;
  893. case "B8": nPixelFormatValue = (uint)GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_B8; break;
  894. default: break;
  895. }
  896. }
  897. }
  898. #endregion
  899. }