📄 imaging.h
字号:
) = 0;
};
//--------------------------------------------------------------------------
// Interface for performing basic operations on a bitmap image
// This can be QI'ed from an IBitmapImage object.
//--------------------------------------------------------------------------
#ifdef _WIN32_WCE
interface DECLSPEC_UUID("327ABDAF-072B-11D3-9D7B-0000F81EF32E")
#else
MIDL_INTERFACE("327ABDAF-072B-11D3-9D7B-0000F81EF32E")
#endif // _WIN32_WCE
IBasicBitmapOps : public IUnknown
{
public:
// Clone an area of the bitmap image
STDMETHOD(Clone)(
IN OPTIONAL const RECT* rect,
OUT IBitmapImage** outbmp,
BOOL bNeedCloneProperty
) = 0;
// Flip the bitmap image in x- and/or y-direction
STDMETHOD(Flip)(
IN BOOL flipX,
IN BOOL flipY,
OUT IBitmapImage** outbmp
) = 0;
// Resize the bitmap image
STDMETHOD(Resize)(
IN UINT newWidth,
IN UINT newHeight,
IN PixelFormatID pixelFormat,
IN InterpolationHint hints,
OUT IBitmapImage** outbmp
) = 0;
// Rotate the bitmap image by the specified angle
STDMETHOD(Rotate)(
IN FLOAT angle,
IN InterpolationHint hints,
OUT IBitmapImage** outbmp
) = 0;
// Adjust the brightness of the bitmap image
STDMETHOD(AdjustBrightness)(
IN FLOAT percent
) = 0;
// Adjust the contrast of the bitmap image
STDMETHOD(AdjustContrast)(
IN FLOAT shadow,
IN FLOAT highlight
) = 0;
// Adjust the gamma of the bitmap image
STDMETHOD(AdjustGamma)(
IN FLOAT gamma
) = 0;
};
//--------------------------------------------------------------------------
// Image decoder interface
//--------------------------------------------------------------------------
#ifdef _WIN32_WCE
interface DECLSPEC_UUID("327ABDAB-072B-11D3-9D7B-0000F81EF32E")
#else
MIDL_INTERFACE("327ABDAB-072B-11D3-9D7B-0000F81EF32E")
#endif // _WIN32_WCE
IImageDecoder : public IUnknown
{
public:
// Initialize the image decoder object
STDMETHOD(InitDecoder)(
IN IStream* stream,
IN DecoderInitFlag flags
) = 0;
// Clean up the image decoder object
STDMETHOD(TerminateDecoder)() = 0;
// Start decoding the current frame
STDMETHOD(BeginDecode)(
IN IImageSink* sink,
IN OPTIONAL IPropertySetStorage* newPropSet
) = 0;
// Continue decoding
STDMETHOD(Decode)() = 0;
// Stop decoding the current frame
STDMETHOD(EndDecode)(
IN HRESULT statusCode
) = 0;
// Query multi-frame dimensions
STDMETHOD(GetFrameDimensionsCount)(
OUT UINT* count
) = 0;
STDMETHOD(GetFrameDimensionsList)(
OUT GUID* dimensionIDs,
IN OUT UINT count
) = 0;
// Get number of frames for the specified dimension
STDMETHOD(GetFrameCount)(
IN const GUID* dimensionID,
OUT UINT* count
) = 0;
// Select currently active frame
STDMETHOD(SelectActiveFrame)(
IN const GUID* dimensionID,
IN UINT frameIndex
) = 0;
// Get basic information about the image
STDMETHOD(GetImageInfo)(
OUT ImageInfo* imageInfo
) = 0;
// Get image thumbnail
STDMETHOD(GetThumbnail)(
IN OPTIONAL UINT thumbWidth,
IN OPTIONAL UINT thumbHeight,
OUT IImage** thumbImage
) = 0;
// Query decoder parameters
STDMETHOD(QueryDecoderParam)(
IN GUID Guid
) = 0;
// Set decoder parameters
STDMETHOD(SetDecoderParam)(
IN GUID Guid,
IN UINT Length,
IN PVOID Value
) = 0;
// Property related functions
STDMETHOD(GetPropertyCount)(
OUT UINT* numOfProperty
) = 0;
STDMETHOD(GetPropertyIdList)(
IN UINT numOfProperty,
IN OUT PROPID* list
) = 0;
STDMETHOD(GetPropertyItemSize)(
IN PROPID propId,
OUT UINT* size
) = 0;
STDMETHOD(GetPropertyItem)(
IN PROPID propId,
IN UINT propSize,
IN OUT PropertyItem* buffer
) = 0;
STDMETHOD(GetPropertySize)(
OUT UINT* totalBufferSize,
OUT UINT* numProperties
) = 0;
STDMETHOD(GetAllPropertyItems)(
IN UINT totalBufferSize,
IN UINT numProperties,
IN OUT PropertyItem* allItems
) = 0;
STDMETHOD(RemovePropertyItem)(
IN PROPID propId
) = 0;
STDMETHOD(SetPropertyItem)(
IN PropertyItem item
) = 0;
};
//--------------------------------------------------------------------------
// Image decode sink interface
//--------------------------------------------------------------------------
#ifdef _WIN32_WCE
interface DECLSPEC_UUID("327ABDAE-072B-11D3-9D7B-0000F81EF32E")
#else
MIDL_INTERFACE("327ABDAE-072B-11D3-9D7B-0000F81EF32E")
#endif // _WIN32_WCE
IImageSink : public IUnknown
{
public:
// Begin the sink process
STDMETHOD(BeginSink)(
IN OUT ImageInfo* imageInfo,
OUT OPTIONAL RECT* subarea
) = 0;
// End the sink process
STDMETHOD(EndSink)(
IN HRESULT statusCode
) = 0;
// Pass the color palette to the image sink
STDMETHOD(SetPalette)(
IN const ColorPalette* palette
) = 0;
// Ask the sink to allocate pixel data buffer
STDMETHOD(GetPixelDataBuffer)(
IN const RECT* rect,
IN PixelFormatID pixelFormat,
IN BOOL lastPass,
OUT BitmapData* bitmapData
) = 0;
// Give the sink pixel data and release data buffer
STDMETHOD(ReleasePixelDataBuffer)(
IN const BitmapData* bitmapData
) = 0;
// Push pixel data
STDMETHOD(PushPixelData)(
IN const RECT* rect,
IN const BitmapData* bitmapData,
IN BOOL lastPass
) = 0;
// Push raw image data
STDMETHOD(PushRawData)(
IN const VOID* buffer,
IN UINT bufsize
) = 0;
STDMETHOD(NeedTransform)(
OUT UINT* rotation
) = 0;
STDMETHOD(NeedRawProperty)(
) = 0;
STDMETHOD(PushRawInfo)(
IN OUT void* info
) = 0;
STDMETHOD(GetPropertyBuffer)(
IN UINT uiTotalBufferSize,
IN OUT PropertyItem** ppBuffer
) = 0;
STDMETHOD(PushPropertyItems)(
IN UINT numOfItems,
IN UINT uiTotalBufferSize,
IN PropertyItem* item
) = 0;
};
//--------------------------------------------------------------------------
// Image encoder interface
//--------------------------------------------------------------------------
#ifdef _WIN32_WCE
interface DECLSPEC_UUID("327ABDAC-072B-11D3-9D7B-0000F81EF32E")
#else
MIDL_INTERFACE("327ABDAC-072B-11D3-9D7B-0000F81EF32E")
#endif // _WIN32_WCE
IImageEncoder : public IUnknown
{
public:
// Initialize the image encoder object
STDMETHOD(InitEncoder)(
IN IStream* stream
) = 0;
// Clean up the image encoder object
STDMETHOD(TerminateEncoder)() = 0;
// Get an IImageSink interface for encoding the next frame
STDMETHOD(GetEncodeSink)(
OUT IImageSink** sink
) = 0;
// Set active frame dimension
STDMETHOD(SetFrameDimension)(
IN const GUID* dimensionID
) = 0;
STDMETHOD(GetEncoderParameterListSize)(
OUT UINT* size
) = 0;
STDMETHOD(GetEncoderParameterList)(
IN UINT size,
OUT EncoderParameters* Params
) = 0;
STDMETHOD(SetEncoderParameters)(
IN const EncoderParameters* Param
) = 0;
};
//--------------------------------------------------------------------------
// Imaging library error codes
//
// !!! TODO
// How does one pick a facility code?
//
// Standard error code used:
// E_INVALIDARG
// E_OUTOFMEMORY
// E_NOTIMPL
// E_ACCESSDENIED
// E_PENDING
//--------------------------------------------------------------------------
#define FACILITY_IMAGING 0x87b
#define MAKE_IMGERR(n) MAKE_HRESULT(SEVERITY_ERROR, FACILITY_IMAGING, n)
#define IMGERR_OBJECTBUSY MAKE_IMGERR(1)
#define IMGERR_NOPALETTE MAKE_IMGERR(2)
#define IMGERR_BADLOCK MAKE_IMGERR(3)
#define IMGERR_BADUNLOCK MAKE_IMGERR(4)
#define IMGERR_NOCONVERSION MAKE_IMGERR(5)
#define IMGERR_CODECNOTFOUND MAKE_IMGERR(6)
#define IMGERR_NOFRAME MAKE_IMGERR(7)
#define IMGERR_ABORT MAKE_IMGERR(8)
#define IMGERR_FAILLOADCODEC MAKE_IMGERR(9)
#define IMGERR_PROPERTYNOTFOUND MAKE_IMGERR(10)
#define IMGERR_PROPERTYNOTSUPPORTED MAKE_IMGERR(11)
#endif // !_IMAGING_H
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -