154 lines
3.7 KiB
C
154 lines
3.7 KiB
C
![]() |
#ifndef UI_CORE_IMAGEDECODE_H_
|
|||
|
#define UI_CORE_IMAGEDECODE_H_
|
|||
|
|
|||
|
#pragma once
|
|||
|
|
|||
|
#include <GdiPlus.h>
|
|||
|
|
|||
|
namespace ui
|
|||
|
{
|
|||
|
|
|||
|
class UILIB_API ImageInfo
|
|||
|
{
|
|||
|
public:
|
|||
|
ImageInfo();
|
|||
|
~ImageInfo();
|
|||
|
|
|||
|
void SetAlpha(bool bAlphaChannel) { m_bAlphaChannel = bAlphaChannel; }
|
|||
|
bool IsAlpha() { return m_bAlphaChannel; }
|
|||
|
bool IsCached() { return m_bCached; }
|
|||
|
void SetCached(bool bCached) { m_bCached = bCached; }
|
|||
|
|
|||
|
void SetPropertyItem(Gdiplus::PropertyItem* pPropertyItem);
|
|||
|
|
|||
|
void PushBackHBitmap(HBITMAP hBitmap);
|
|||
|
HBITMAP GetHBitmap(int nIndex);
|
|||
|
int GetFrameCount();
|
|||
|
bool IsGif();
|
|||
|
int GetInterval(int nIndex); //<2F><><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>λ
|
|||
|
|
|||
|
static std::unique_ptr<ImageInfo> LoadImage(const std::wstring& strImageFullPath);
|
|||
|
static std::unique_ptr<ImageInfo> LoadImage(HGLOBAL hGlobal, const std::wstring& imageFullPath);
|
|||
|
|
|||
|
private:
|
|||
|
static std::unique_ptr<ImageInfo> LoadImageByBitmap(std::unique_ptr<Gdiplus::Bitmap>& pGdiplusBitmap, const std::wstring& imageFullPath);
|
|||
|
|
|||
|
public:
|
|||
|
int nX;
|
|||
|
int nY;
|
|||
|
std::wstring sImageFullPath;
|
|||
|
|
|||
|
private:
|
|||
|
bool m_bAlphaChannel;
|
|||
|
bool m_bCached;
|
|||
|
std::unique_ptr<Gdiplus::PropertyItem> m_propertyItem;
|
|||
|
std::vector<HBITMAP> m_vecBitmap;
|
|||
|
};
|
|||
|
|
|||
|
struct UILIB_API ImageAttribute
|
|||
|
{
|
|||
|
public:
|
|||
|
ImageAttribute();
|
|||
|
|
|||
|
void Init();
|
|||
|
void SetImageString(const std::wstring& strImageString);
|
|||
|
static void ModifyAttribute(ImageAttribute& imageAttribute, const std::wstring& strImageString);
|
|||
|
|
|||
|
std::wstring simageString;
|
|||
|
std::wstring sImageName;
|
|||
|
UiRect rcDest;
|
|||
|
UiRect rcSource;
|
|||
|
UiRect rcCorner;
|
|||
|
BYTE bFade;
|
|||
|
bool bTiledX;
|
|||
|
bool bTiledY;
|
|||
|
int nPlayCount;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>GIF<49><46><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD>Ŵ<EFBFBD><C5B4><EFBFBD> -1 <20><>һֱ<D2BB><D6B1><EFBFBD>ţ<EFBFBD>ȱʡֵ<CAA1><D6B5>
|
|||
|
};
|
|||
|
|
|||
|
class UILIB_API Image
|
|||
|
{
|
|||
|
public:
|
|||
|
Image();
|
|||
|
|
|||
|
bool IsValid() { return (bool)imageCache; }
|
|||
|
bool IsPlaying() { return m_bPlaying; }
|
|||
|
void SetPlaying(bool bPlaying) { m_bPlaying = bPlaying; }
|
|||
|
|
|||
|
void SetImageString(const std::wstring& strImageString);
|
|||
|
void ClearCache();
|
|||
|
|
|||
|
bool IncrementCurrentFrame();
|
|||
|
void SetCurrentFrame(int nCurrentFrame);
|
|||
|
HBITMAP GetCurrentHBitmap();
|
|||
|
int GetCurrentInterval();
|
|||
|
int GetCurrentFrameIndex();
|
|||
|
int GetCycledCount();
|
|||
|
void ClearCycledCount();
|
|||
|
bool ContinuePlay();
|
|||
|
ImageAttribute imageAttribute;
|
|||
|
std::shared_ptr<ImageInfo> imageCache;
|
|||
|
|
|||
|
private:
|
|||
|
int m_nCurrentFrame;
|
|||
|
bool m_bPlaying;
|
|||
|
int m_nCycledCount;//<2F><><EFBFBD>Ŵ<EFBFBD><C5B4><EFBFBD>
|
|||
|
};
|
|||
|
|
|||
|
class UILIB_API StateImage
|
|||
|
{
|
|||
|
public:
|
|||
|
StateImage();
|
|||
|
|
|||
|
void SetControl(Control* control) { m_pControl = control; }
|
|||
|
Image& operator[](ControlStateType stateType) { return m_stateImageMap[stateType]; }
|
|||
|
|
|||
|
bool HasHotImage();
|
|||
|
bool PaintStatusImage(IRenderContext* pRender, ControlStateType stateType, const std::wstring& sImageModify = L"");
|
|||
|
Image* GetEstimateImage();
|
|||
|
void ClearCache();
|
|||
|
|
|||
|
private:
|
|||
|
Control* m_pControl;
|
|||
|
std::map<ControlStateType, Image> m_stateImageMap;
|
|||
|
};
|
|||
|
|
|||
|
class UILIB_API StateImageMap
|
|||
|
{
|
|||
|
public:
|
|||
|
StateImageMap() { }
|
|||
|
|
|||
|
void SetControl(Control* control);
|
|||
|
|
|||
|
void SetImage(StateImageType stateImageType, ControlStateType stateType, const std::wstring& strImagePath);
|
|||
|
std::wstring GetImagePath(StateImageType stateImageType, ControlStateType stateType);
|
|||
|
|
|||
|
bool HasHotImage();
|
|||
|
bool PaintStatusImage(IRenderContext* pRender, StateImageType stateImageType, ControlStateType stateType, const std::wstring& sImageModify = L"");
|
|||
|
Image* GetEstimateImage(StateImageType stateImageType);
|
|||
|
|
|||
|
void ClearCache();
|
|||
|
|
|||
|
private:
|
|||
|
std::map<StateImageType, StateImage> m_stateImageMap;
|
|||
|
};
|
|||
|
|
|||
|
class UILIB_API StateColorMap
|
|||
|
{
|
|||
|
public:
|
|||
|
StateColorMap();
|
|||
|
|
|||
|
void SetControl(Control* control);
|
|||
|
std::wstring& operator[](ControlStateType stateType) { return m_stateColorMap[stateType]; }
|
|||
|
|
|||
|
bool HasHotColor();
|
|||
|
void PaintStatusColor(IRenderContext* pRender, UiRect rcPaint, ControlStateType stateType);
|
|||
|
|
|||
|
private:
|
|||
|
Control* m_pControl;
|
|||
|
std::map<ControlStateType, std::wstring> m_stateColorMap;
|
|||
|
};
|
|||
|
|
|||
|
} // namespace ui
|
|||
|
|
|||
|
#endif // UI_CORE_IMAGEDECODE_H_
|