102 lines
3.1 KiB
C++
102 lines
3.1 KiB
C++
#ifndef _SVC_IMGWRITE_H
|
|
#define _SVC_IMGWRITE_H
|
|
|
|
#include <api/service/services.h>
|
|
#include <bfc/platform/platform.h>
|
|
#include <bfc/dispatch.h>
|
|
|
|
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 <bfc/svc_enum.h>
|
|
|
|
class ImgWriterEnum : public SvcEnumT<svc_imageWriter> {
|
|
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
|