86 lines
2.8 KiB
C
86 lines
2.8 KiB
C
![]() |
#pragma once
|
|||
|
//#include "util.h"
|
|||
|
#include "log.h"
|
|||
|
#include <windows.h>
|
|||
|
#include <gdiplus.h>
|
|||
|
|
|||
|
static const std::wstring kImageJPEG = L"image/jpeg";
|
|||
|
static const std::wstring kImagePNG = L"image/png";
|
|||
|
static const std::wstring kImageBMP = L"image/bmp";
|
|||
|
static const std::wstring kImageGIF = L"image/gif";
|
|||
|
|
|||
|
|
|||
|
class ZoomImage
|
|||
|
{
|
|||
|
public:
|
|||
|
ZoomImage(void);
|
|||
|
~ZoomImage(void);
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD><C5BA><EFBFBD>ͼƬ<CDBC><C6AC><EFBFBD><EFBFBD>·<EFBFBD><C2B7>
|
|||
|
void SetImagePath(const std::wstring &image_path);
|
|||
|
//<2F><><EFBFBD><EFBFBD>Ϊ<EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD>ģʽ
|
|||
|
void SetAutoZoom(bool area_zoom,int auto_max_with,int auto_max_height);
|
|||
|
//<2F><><EFBFBD><EFBFBD>Ϊ<EFBFBD>̶<EFBFBD><CCB6><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD>ģʽ
|
|||
|
void SetSize(int width,int height);
|
|||
|
//<2F><><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ
|
|||
|
void SetRatio(float ratio);
|
|||
|
|
|||
|
/*
|
|||
|
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ijһ<EFBFBD><EFBFBD>ͼƬ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>浽Ϊָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ
|
|||
|
* @param filepath:Ҫ<EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD>ԴͼƬ·<EFBFBD><EFBFBD>
|
|||
|
* @param mime_type:<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼƬ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
*/
|
|||
|
bool Zoom(const std::wstring& filepath,std::wstring mime_type=L"image/jpeg");
|
|||
|
//<2F><>ͼƬ<CDBC><C6AC><EFBFBD><EFBFBD>Ϊָ<CEAA><D6B8><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼƬ
|
|||
|
bool ConvertImageFormat(std::wstring& filepath, std::wstring mime_type);
|
|||
|
//<2F><>ȡͼ<C8A1><CDBC><EFBFBD>ķ<EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>
|
|||
|
static Gdiplus::RotateFlipType GetRotateFlipType(Gdiplus::Image& image);
|
|||
|
static std::wstring GetMimeType(const std::wstring& filepath);
|
|||
|
static void GetMimeType(const std::wstring& filepath, std::wstring& mime_type_out, std::wstring& exten_out);
|
|||
|
/*
|
|||
|
* @brief <EFBFBD><EFBFBD>width<EFBFBD><EFBFBD>height<EFBFBD>ı<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡԴͼƬ<EFBFBD><EFBFBD>ͬ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ<EFBFBD><EFBFBD>ͼƬ<EFBFBD><EFBFBD><EFBFBD>֣<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>浽Ϊָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ
|
|||
|
* @param filepath:ԴͼƬ·<EFBFBD><EFBFBD>
|
|||
|
* @param image_path_out:<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼƬ·<EFBFBD><EFBFBD>
|
|||
|
* @param width:Ҫ<EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD>ԴͼƬ·<EFBFBD><EFBFBD>
|
|||
|
* @param height:Ҫ<EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD>ԴͼƬ·<EFBFBD><EFBFBD>
|
|||
|
* @param mime_type:<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼƬ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
*/
|
|||
|
static bool SavePaddingImage(const std::wstring& image_path, const std::wstring& image_path_out, int width, int height, std::wstring mime_type = L"image/jpeg");
|
|||
|
|
|||
|
protected:
|
|||
|
//<2F>ж<EFBFBD><D0B6>Ƿ<EFBFBD><C7B7><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
bool IsNeedZoom(int width,int height);
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD><C5BA>Ĵ<EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>浽width_<68><5F>height_
|
|||
|
bool CalculateSize(int width_src,int height_src);
|
|||
|
static bool GetImageCLSID(const wchar_t* format, CLSID* pCLSID);
|
|||
|
static bool SaveImage(Gdiplus::Image& image, const std::wstring& file_path,std::wstring mime_type,long quality_num = 95);
|
|||
|
static Gdiplus::RotateFlipType GetRotateFlipType(short orientation);
|
|||
|
static std::wstring GetMimeType(GUID& clsid);
|
|||
|
|
|||
|
private:
|
|||
|
enum ZoomType
|
|||
|
{
|
|||
|
by_fixed_size = 0,
|
|||
|
by_ratio,
|
|||
|
by_auto,by_none
|
|||
|
};//by_fixed_size:<3A><><EFBFBD>̶<EFBFBD><CCB6>ߴ<EFBFBD>,by_ratio:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
|
|||
|
|
|||
|
std::wstring file_path_save_;
|
|||
|
ZoomType zoom_type_;
|
|||
|
|
|||
|
bool area_zoom_; //<2F>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>width*height;
|
|||
|
int auto_max_width_;
|
|||
|
int auto_max_height_;
|
|||
|
|
|||
|
int width_;
|
|||
|
int height_;
|
|||
|
|
|||
|
float ratio_;
|
|||
|
|
|||
|
std::wstring image_path_;
|
|||
|
};
|
|||
|
|
|||
|
//<2F><><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>max_width * max_height<68><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>£<EFBFBD><C2A3><EFBFBD><EFBFBD><EFBFBD>ֵΪtrue<75><65>ʾ<EFBFBD><CABE>Ҫ<EFBFBD>ü<EFBFBD><C3BC><EFBFBD>ͬʱ<CDAC><CAB1>ͼƬ<CDBC><C6AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>size
|
|||
|
bool CalculateImageSize(const std::wstring& file, SIZE& size, int max_width, int max_height);
|
|||
|
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD>Сcx * cy
|
|||
|
void ZoomImageF(const std::wstring &src, const std::wstring &dest, int cx, int cy);
|