IMGCommon.h 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. #ifndef __IMG_COMMON_20151214__
  2. #define __IMG_COMMON_20151214__
  3. #pragma once
  4. #include <gdiplus.h>
  5. using namespace Gdiplus;
  6. #pragma comment(lib, "gdiplus.lib")
  7. // <string>和<vector>命名空间最好放在stdafx.h头文件中,不然可能产生编译错误;
  8. #include <string>
  9. #include <vector>
  10. using namespace std;
  11. #ifndef _UNICODE
  12. typedef string TString;
  13. #else
  14. typedef wstring TString;
  15. #endif
  16. typedef vector<TString> STR_VEC;
  17. enum // 缩放结果;
  18. {
  19. ZoomNull = 0, // 无缩放;
  20. ZoomIn = 1, // 缩小;
  21. ZoomOut = 2 // 放大;
  22. };
  23. enum
  24. {
  25. OImgtype = 1, // 原片;
  26. EImgtype = 2, // 初修;
  27. FImgtype = 3, // 精修;
  28. DImgtype = 4, // 设计;
  29. OBImgtype = 5,
  30. EBImgtype = 6,
  31. FBImgtype = 7,
  32. DBImgtype = 8
  33. };
  34. #define GET_XPIX(x) ( x >> 16) // 高16位;
  35. #define GET_YPIX(y) (y & 0x0000ffff) // 低16位;
  36. #define SET_PIX(x,y) (( x << 16) | y) // 高低合并;
  37. #define INVALID_COPY_PIX ((DWORD)-1) // 传递此值,表示没有复制压缩;
  38. class IMGCommon
  39. {
  40. public:
  41. IMGCommon(void);
  42. ~IMGCommon(void);
  43. static ULONG_PTR m_gdiplusToken;
  44. public:
  45. static inline int match(IN CONST TString &strExt, IN CONST TString &strfile)
  46. {
  47. int pos = strfile.find_last_of(_T('.'));
  48. if (TString::npos != pos)
  49. return !_tcsicmp(strExt.c_str(), strfile.substr(pos).c_str());
  50. return FALSE;
  51. }
  52. static INT IsCorrectExt( IN const TString &fext, OUT TString* lpMistakenExt = NULL );
  53. static BOOL ExtMerge( IN CONST TString& ext1, IN CONST TString& ext2, OUT TString &merge );
  54. // 过滤非复制扩展名的文件,同时去掉缩略图,保留指定复制扩展名的文件;
  55. static CString GetFileName(IN CONST CString& strfile);
  56. static void GetFilteringImg(IN CStringArray &AryImgs, IN LPCTSTR lpCopyExt, IN BOOL bPickoutThumbnail = TRUE);
  57. static void GetFilteringImg(IN STR_VEC &vtImgs, IN LPCTSTR lpCopyExt, IN BOOL bPickoutThumbnail = TRUE);
  58. static void SubgroupExt(IN STR_VEC &vtAllImgs, IN LPCTSTR lpSubgroupExt, OUT CStringArray &AryImgs); // 分组扩展名;
  59. static void SubgroupExt(IN STR_VEC &vtAllImgs, IN LPCTSTR lpSubgroupExt, OUT STR_VEC &vtImgs); // 分组扩展名;
  60. //////////////////////////////////////////////////////////////////////////
  61. static BOOL LoadImgFromFile(IN Image** pImg, LPCTSTR lpPath);
  62. static BOOL LoadImgFromBuffer(IN Image** pImg, IN BYTE* pBuffer, IN CONST INT& nBufLen);
  63. static BOOL LoadImgFromBuffer(IN Image** pImg, LPCTSTR lpPath);
  64. static Image* LoadImgFromResource( IN HMODULE hModule, IN LPCTSTR lpName, IN LPCTSTR lpType);
  65. /* Bitmap继承于Image;
  66. static BOOL LoadImgFromFile(IN Bitmap** pImg, LPCTSTR lpPath);
  67. static BOOL LoadImgFromBuffer(IN Bitmap** pImg, IN BYTE* pBuffer, IN CONST INT& nBufLen);
  68. */
  69. //////////////////////////////////////////////////////////////////////////
  70. static BOOL GetOrientation(IN Image *pImg);
  71. static int GetEncoderClsid(IN CONST WCHAR* format, OUT CLSID* pClsid);
  72. static BOOL SaveImg2newfile(IN Image* pImg, IN CString strNewfile, IN ULONG uQuality);
  73. static BOOL SaveImg2newfile(IN Image* pImg, IN TString strNewfile, IN ULONG uQuality);
  74. static int ZoomImg(IN CRect &Imgrc, IN CONST DWORD &dwDisplayPix, OUT DWORD &dwZoomPix);
  75. static int ZoomImg(IN CONST DWORD &dwImgPix, IN CONST DWORD &dwDisplayPix, OUT DWORD &dwZoomPix);
  76. static BOOL ImgThumbnail(IN Image* pImg, IN CONST DWORD &dwDisplayPix, IN CString strNewfile, IN ULONG uQuality);
  77. static BOOL ImgThumbnail(IN LPCTSTR lpImgpath, IN CONST DWORD &dwDisplayPix, IN CString strNewfile, IN ULONG uQuality);
  78. static BOOL ImgThumbnail(IN CONST TString &strImgpath, IN CONST DWORD &dwDisplayPix, IN TString strNewfile, IN ULONG uQuality);
  79. static BOOL SimpleImgThumbnail(IN LPCTSTR lpImgpath, IN CONST DWORD &dwDisplayPix, IN CString strNewfile, IN ULONG uQuality);
  80. };
  81. #endif