ShareMemory_Image.h 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. // 下列 ifdef 块是创建使从 DLL 导出更简单的
  2. // 宏的标准方法。此 DLL 中的所有文件都是用命令行上定义的 SHAREMEMORY_IMAGE_EXPORTS
  3. // 符号编译的。在使用此 DLL 的
  4. // 任何其他项目上不应定义此符号。这样,源文件中包含此文件的任何其他项目都会将
  5. // SHAREMEMORY_IMAGE_API 函数视为是从 DLL 导入的,而此 DLL 则将用此宏定义的
  6. // 符号视为是被导出的。
  7. #ifdef SHAREMEMORY_IMAGE_EXPORTS
  8. #define SHAREMEMORY_IMAGE_API __declspec(dllexport)
  9. #else
  10. #define SHAREMEMORY_IMAGE_API __declspec(dllimport)
  11. #endif
  12. #ifndef SHAREMEMORY_IMAGE_EXPORTS
  13. #ifdef _WIN64
  14. #ifdef _DEBUG
  15. #pragma comment(lib, "ShareMemory_ImageX64D.lib")
  16. #else
  17. #pragma comment(lib, "ShareMemory_ImageX64.lib")
  18. #endif
  19. #else
  20. #ifdef _DEBUG
  21. #pragma comment(lib, "ShareMemory_ImageD.lib")
  22. #else
  23. #pragma comment(lib, "ShareMemory_Image.lib")
  24. #endif
  25. #endif
  26. #endif
  27. #ifdef SHAREMEMORY_IMAGE_EXPORTS
  28. #define SHAREMEMORY_IMAGE_API __declspec(dllexport)
  29. #define SHAREMEMORY_IMAGE_C_API extern "C" __declspec(dllexport)
  30. #else
  31. #define SHAREMEMORY_IMAGE_API __declspec(dllimport)
  32. #define SHAREMEMORY_IMAGE_C_API extern "C" __declspec(dllimport)
  33. #endif
  34. #include "ShareMemory_Block.h"
  35. // 此类是从 ShareMemory_Image.dll 导出的
  36. class SHAREMEMORY_IMAGE_API CShareMemory_Image : public CShareMemory_Block
  37. {
  38. DWORD m_nImagePacketPoint;//包含info和data
  39. DWORD m_nImageInfoSize;
  40. DWORD m_nImageRawSize;
  41. DWORD m_nImageBlockSize;//Image申请的全部block大小
  42. DWORD m_Bid;
  43. unsigned char * m_pImageBlockBuff;//保存此ImageBlock对应共享内存的首地址
  44. bool ImageBlockWrite(LPVOID buff, DWORD size);
  45. bool ImageBlockRead(LPVOID buff, DWORD size);
  46. bool AddImageSequeue(unsigned long long seqid, unsigned long long frameid);
  47. bool SetImageSequeue(unsigned long long seqid, unsigned long long frameid);
  48. bool GetImageSequeue(unsigned long long & seqid, unsigned long long & frameid);
  49. public:
  50. CShareMemory_Image();
  51. ~CShareMemory_Image();
  52. DWORD SizeOfImageBlock();
  53. DWORD SizeOfImageRaw();
  54. DWORD SizeOfImageInfo();
  55. //第一步SetImageDataSize,生成整个ImageBlock的大小
  56. bool SetImageDataSize(unsigned long long width, unsigned long long height, unsigned long long bits, unsigned long long top, unsigned long long bottom, unsigned long long left, unsigned long long right);
  57. //第二步创建ImageBlock * N 大小的circle。调用ShareMemoryBlockSet,将获得此ImageBlock对应共享内存的首地址。在此之后,其他函数才能正常工作。
  58. virtual bool ShareMemoryBlockSet(DWORD Bid, int AccessFlags);
  59. //bool CreateImageDataBuff();
  60. bool ReadImageData(LPVOID & buff, DWORD & size);
  61. bool WriteImageData(LPVOID buff, DWORD size);
  62. bool ReadImageHeadandData(LPVOID & buff, DWORD & size);
  63. bool WriteImageHeadandData(LPVOID buff, DWORD size);
  64. bool AddImageFullSize(unsigned long long width, unsigned long long height, unsigned long long bits);
  65. bool AddImageTrim(unsigned long long top, unsigned long long bottom, unsigned long long left, unsigned long long right);
  66. bool AddImagetime(SYSTEMTIME st);
  67. bool AddImageXrayflag(unsigned long long flag);
  68. bool SetImageFullSize(unsigned long long width, unsigned long long height, unsigned long long bits);
  69. bool SetImageTrim(unsigned long long top, unsigned long long bottom, unsigned long long left, unsigned long long right);
  70. bool SetImagetime(SYSTEMTIME st);
  71. bool SetImageXrayflag(unsigned long long flag);
  72. bool GetImageFullSize(unsigned long long & width, unsigned long long & height, unsigned long long & bits);
  73. bool GetImageTrim(unsigned long long & top, unsigned long long & bottom, unsigned long long & left, unsigned long long & right);
  74. bool GetImagetime(SYSTEMTIME & st);
  75. bool GetImageXrayflag(unsigned long long & flag);
  76. bool AddImageHeadInfo(unsigned short key, unsigned long long &Val);
  77. bool SetImageHeadInfo(unsigned short key, unsigned long long &Val);
  78. bool GetImageHeadInfo(unsigned short key, unsigned long long &Val);
  79. bool SetImageId(unsigned long long id);
  80. bool GetImageId(unsigned long long & id);
  81. DWORD GetImageBlockId();
  82. };