#ifndef _SVC_IMGWRITE_H #define _SVC_IMGWRITE_H #include #include #include class NOVTABLE svc_imageWriter : public Dispatchable { public: static FOURCC getServiceType() { return WaSvc::IMAGEWRITER; } // returns a human readable string about the format. eg "JPEG" const wchar_t * getImageTypeName(); // returns a semi-colon delimited list of file extensions for this format. eg "jpg;jpeg" // MUST BE LOWER CASE const wchar_t * getExtensions(); // valid items include "quality" for jpeg files with value "0" to "100" // return value is 1 if the config item is supported, 0 if it is not. int setConfig(const wchar_t * item, const wchar_t * value); // valid items include "quality" for jpeg files with value "0" to "100", "lossless" returns "1" if it is "0" otherwise // return value is 1 if the config item is supported, 0 if it is not. int getConfig(const wchar_t * item, wchar_t * value, int valuelen); // returns 1 if the bit depth is supported (eg 32 for ARGB32, 24 for RGB24) // ARGB32 MUST be supported int bitDepthSupported(int depth); // returns the image in our format, free the returned buffer with api_memmgr::sysFree() void * convert(const void *pixels, int bitDepth, int w, int h, int *length); enum { GETIMAGETYPENAME=10, GETEXTENSIONS=20, SETCONFIG=30, GETCONFIG=40, BITDEPTHSUPPORTED=50, CONVERT=60, }; }; inline const wchar_t *svc_imageWriter::getImageTypeName() { return _call(GETIMAGETYPENAME, L""); } inline const wchar_t *svc_imageWriter::getExtensions() { return _call(GETEXTENSIONS, L""); } inline int svc_imageWriter::setConfig(const wchar_t * item, const wchar_t * value) { return _call(SETCONFIG, (int)0, item, value); } inline int svc_imageWriter::getConfig(const wchar_t * item, wchar_t * value, int valuelen) { return _call(GETCONFIG, (int)0, item, value, valuelen); } inline int svc_imageWriter::bitDepthSupported(int depth) { return _call(BITDEPTHSUPPORTED, (int)0, depth); } inline void * svc_imageWriter::convert(const void *pixels, int bitDepth, int w, int h, int *length) { return _call(CONVERT, (void*)0, pixels, bitDepth, w, h, length); } // derive from this one class NOVTABLE svc_imageWriterI : public svc_imageWriter { public: virtual const wchar_t * getExtensions()=0; virtual const wchar_t * getImageTypeName()=0; virtual int setConfig(const wchar_t * item, const wchar_t * value){return 0;} virtual int getConfig(const wchar_t * item, wchar_t * value, int valuelen){return 0;} virtual int bitDepthSupported(int depth)=0; virtual void * convert(const void *pixels, int bitDepth, int w, int h, int *length)=0; protected: RECVS_DISPATCH; }; /* do we still use svc_enum? #include class ImgWriterEnum : public SvcEnumT { public: ImgWriterEnum(const char *_ext=NULL) : ext(_ext) { } protected: virtual int testService(svc_imageWriter *svc) { if (ext.isempty()) return 1; else { PathParser pp(svc->getExtensions(), ";"); for (int i = 0; i < pp.getNumStrings(); i++) if (STRCASEEQL(ext, pp.enumString(i))) return 1; return 0; } } String ext; }; */ #endif