133 lines
4.1 KiB
C++
133 lines
4.1 KiB
C++
#ifndef __1fe1d0e2_d009_4c25_a3bc_d0620c61ed8d__
|
|
#define __1fe1d0e2_d009_4c25_a3bc_d0620c61ed8d__
|
|
|
|
#include <windows.h>
|
|
#include "simstr.h"
|
|
#include <gdiplus.h>
|
|
#include "simarray.h"
|
|
|
|
//
|
|
// We will define this when explicit initialization is implemented correctly
|
|
//
|
|
#define GDIPLUSHELPER_EXPLICIT_INITIALIZATION
|
|
|
|
#if defined(GDIPLUSHELPER_EXPLICIT_INITIALIZATION)
|
|
#include <gdiplusinit.h>
|
|
#endif
|
|
|
|
class CGdiPlusHelper
|
|
{
|
|
private:
|
|
Gdiplus::ImageCodecInfo *m_pImageEncoderInfo;
|
|
UINT m_nImageEncoderCount;
|
|
|
|
Gdiplus::ImageCodecInfo *m_pImageDecoderInfo;
|
|
UINT m_nImageDecoderCount;
|
|
|
|
|
|
#if defined(GDIPLUSHELPER_EXPLICIT_INITIALIZATION)
|
|
//
|
|
// GDI+ Initialization stuff
|
|
//
|
|
ULONG_PTR m_pGdiplusToken;
|
|
bool m_bGdiplusInitialized;
|
|
#endif
|
|
|
|
private:
|
|
CGdiPlusHelper( const CGdiPlusHelper & );
|
|
CGdiPlusHelper &operator=( const CGdiPlusHelper & );
|
|
|
|
public:
|
|
CGdiPlusHelper(void);
|
|
~CGdiPlusHelper(void);
|
|
|
|
protected:
|
|
HRESULT Initialize(void);
|
|
static HRESULT ConstructCodecExtensionSearchStrings( CSimpleString &strExtensions, Gdiplus::ImageCodecInfo *pImageCodecInfo, UINT nImageCodecCount );
|
|
void Destroy(void);
|
|
|
|
public:
|
|
bool IsValid(void) const;
|
|
|
|
HRESULT ConstructDecoderExtensionSearchStrings( CSimpleString &strExtensions );
|
|
HRESULT ConstructEncoderExtensionSearchStrings( CSimpleString &strExtensions );
|
|
HRESULT GetClsidOfEncoder( const GUID &guidFormatId, CLSID &clsidFormat ) const;
|
|
HRESULT GetClsidOfDecoder( const GUID &guidFormatId, CLSID &clsidFormat ) const;
|
|
HRESULT Convert( LPCWSTR pszInputFilename, LPCWSTR pszOutputFilename, const CLSID &guidOutputFormat ) const;
|
|
HRESULT LoadAndScale( HBITMAP &hTargetBitmap, LPCTSTR pszFilename, UINT nMaxWidth, UINT nMaxHeight, bool bStretchSmallImages );
|
|
HRESULT SaveMultipleImagesAsMultiPage( const CSimpleDynamicArray<CSimpleStringWide> &Filenames, const CSimpleStringWide &strFilename, const CLSID &guidOutputFormat );
|
|
|
|
static Gdiplus::EncoderParameters *AppendEncoderParameter( Gdiplus::EncoderParameters *pEncoderParameters, const GUID &guidProp, ULONG nType, PVOID pVoid );
|
|
static inline GDISTATUS_TO_HRESULT(Gdiplus::Status status) { return (status == Gdiplus::Ok) ? S_OK : E_FAIL; }
|
|
};
|
|
|
|
|
|
class CImageFileFormatVerifier
|
|
{
|
|
private:
|
|
//
|
|
// Internal class used to store the file signatures
|
|
//
|
|
class CImageFileFormatVerifierItem
|
|
{
|
|
private:
|
|
PBYTE m_pSignature;
|
|
PBYTE m_pMask;
|
|
int m_nLength;
|
|
GUID m_guidFormat;
|
|
CLSID m_clsidDecoder;
|
|
|
|
public:
|
|
//
|
|
// Constructors, assignment operator and destructor
|
|
//
|
|
CImageFileFormatVerifierItem(void);
|
|
CImageFileFormatVerifierItem( const PBYTE pSignature, const PBYTE pMask, int nLength, const GUID &guidFormat, const CLSID &guidDecoder );
|
|
CImageFileFormatVerifierItem( const CImageFileFormatVerifierItem &other );
|
|
CImageFileFormatVerifierItem &operator=( const CImageFileFormatVerifierItem &other );
|
|
CImageFileFormatVerifierItem &Assign( const PBYTE pSignature, const PBYTE pMask, int nLength, const GUID &Format, const CLSID &guidDecoder );
|
|
~CImageFileFormatVerifierItem(void);
|
|
|
|
protected:
|
|
void Destroy(void);
|
|
|
|
public:
|
|
//
|
|
// Accessor functions
|
|
//
|
|
PBYTE Signature(void) const;
|
|
PBYTE Mask(void) const;
|
|
int Length(void) const;
|
|
GUID Format(void) const;
|
|
CLSID Decoder(void) const;
|
|
|
|
//
|
|
// Does this stream of bytes match this format?
|
|
//
|
|
bool Match( PBYTE pBytes, int nLen ) const;
|
|
};
|
|
|
|
|
|
private:
|
|
CSimpleDynamicArray<CImageFileFormatVerifierItem> m_FileFormatVerifierList;
|
|
int m_nMaxSignatureLength;
|
|
PBYTE m_pSignatureBuffer;
|
|
|
|
private:
|
|
CImageFileFormatVerifier( const CImageFileFormatVerifier & );
|
|
CImageFileFormatVerifier &operator=( const CImageFileFormatVerifier & );
|
|
|
|
public:
|
|
CImageFileFormatVerifier(void);
|
|
~CImageFileFormatVerifier(void);
|
|
void Destroy(void);
|
|
bool IsValid(void) const;
|
|
bool IsImageFile( LPCTSTR pszFilename );
|
|
GUID GetImageType( LPCTSTR pszFilename );
|
|
|
|
};
|
|
|
|
|
|
#endif
|
|
|