服务套件提供了可在插件模块端使用的功能。服务套件函数返回两个 TriglavPlugInInt 类型的常量。 返回 kTriglavPlugInAPIResultSuccess 表示成功,返回 kTriglavPlugInAPIResultFailed 表示操作失败。
先看看插件服务器跟各个服务套件是如何关联起来的:
// 插件服务器
typedef struct _TriglavPlugInServer {
TriglavPlugInRecordSuite recordSuite;
TriglavPlugInServiceSuite serviceSuite;
TriglavPlugInHostObject hostObject;
} TriglavPlugInServer;
// 插件服务套件
typedef struct _TriglavPlugInServiceSuite {
TriglavPlugInStringService* stringService;
TriglavPlugInBitmapService* bitmapService;
TriglavPlugInOffscreenService* offscreenService;
TriglavPlugInPropertyService* propertyService;
TriglavPlugInOffscreenService2* offscreenService2;
TriglavPlugInPropertyService2* propertyService2;
...
} TriglavPlugInServiceSuite;
本篇介绍字符串服务和位图服务。
一、字符串服务
该服务主要提供处理字符串的功能。结构体定义如下:
typedef struct _TriglavPlugInStringService {
TriglavPlugInStringCreateWithAsciiStringProc createWithAsciiStringProc;
TriglavPlugInStringCreateWithUnicodeStringProc createWithUnicodeStringProc;
TriglavPlugInStringCreateWithLocalCodeStringProc createWithLocalCodeStringProc;
TriglavPlugInStringCreateWithStringIDProc createWithStringIDProc;
TriglavPlugInStringRetainProc retainProc;
TriglavPlugInStringReleaseProc releaseProc;
TriglavPlugInStringGetUnicodeCharsProc getUnicodeCharsProc;
TriglavPlugInStringGetUnicodeLengthProc getUnicodeLengthProc;
TriglavPlugInStringGetLocalCodeCharsProc getLocalCodeCharsProc;
TriglavPlugInStringGetLocalCodeLengthProc getLocalCodeLengthProc;
} TriglavPlugInStringService;
1. 从给定的 ascii 字符串创建一个字符串对象,不需要时需手动调用函数 releaceProc() 销毁。
/**
* stringObject: 字符串对象
* ascii: ascii 字符串
* length: ascii 字符串长度
**/
TRIGLAV_PLUGIN_API *createWithAsciiStringProc(
TriglavPlugInStringObject* stringObject,
const TriglavPlugInChar* ascii,
const TriglavPlugInInt length);
2. 从给定的 unicode 字符串创建一个字符串对象,不需要时需手动调用函数 releaceProc() 销毁。
/**
* stringObject: 字符串对象
* unicode: unicode 字符串
* length: unicode 字符串长度
**/
TRIGLAV_PLUGIN_API *createWithUnicodeStringProc(
TriglavPlugInStringObject* stringObject,
const TriglavPlugInUniChar* unicode,
const TriglavPlugInInt length );
3. 从指定的本地代码字符串创建字符串对象,不需要时需手动调用函数 releaceProc() 销毁。
/**
* stringObject: 字符串对象
* localcode: 本地代码字符串
* length: 本地代码字符串长度
**/
TRIGLAV_PLUGIN_API *createWithLocalCodeStringProc(
TriglavPlugInStringObject* stringObject,
const TriglavPlugInChar* localcode,
const TriglavPlugInInt length);
4. 根据指定的资源标识符创建字符串对象,不需要时需手动调用函数 releaceProc() 销毁。
/**
* stringObject: 字符串对象
* stringID: 资源标识符
* hostObject: 宿主对象
**/
TRIGLAV_PLUGIN_API *createWithStringIDProc(
TriglavPlugInStringObject* stringObject,
const TriglavPlugInInt stringID,
TriglavPlugInHostObject hostObject);
这里的 stringID 获取需要注意平台:
windows: 请使用 Visula Studio 的 String Table。将这里设置的值代入自变量 stringID 中,就会生成与之对应的字符串对象;
mac: 请使用 Localizable.strings。将这里设置的值代入自变量 stringID 中,就会生成与之对应的字符串对象。
5. 销毁指定的字符串对象
/**
* stringObject: 字符串对象
**/
TRIGLAV_PLUGIN_API *releaseProc(
TriglavPlugInStringObject stringObject);
6. 从指定的字符串对象获取 unicode 字符串
/**
* unicode: unicode 字符串
* stringObject: 字符串对象
**/
TRIGLAV_PLUGIN_API *getUnicodeCharsProc(
const TriglavPlugInUniChar** unicode,
TriglavPlugInStringObject stringObject);
7. 从指定的字符串对象获取 unicode 字符串长度
/**
* length: unicode 字符串长度
* stringObject: 字符串对象
**/
TRIGLAV_PLUGIN_API *getUnicodeLengthProc(
TriglavPlugInInt* length,
TriglavPlugInStringObject stringObject);
8. 从指定的字符串对象获取本地代码字符串
/**
* localcode: 本地代码字符串
* stringObject: 字符串对象
**/
TRIGLAV_PLUGIN_API *getLocalCodeCharsProc(
const TriglavPlugInUniChar** localcode,
TriglavPlugInStringObject stringObject );
9. 从指定的字符串对象获取本地代码字符串长度
/**
* length: 本地代码字符串长度
* stringObject: 字符串对象
**/
TRIGLAV_PLUGIN_API *getLocalCodeLengthProc(
TriglavPlugInInt* length,
TriglavPlugInStringObject stringObject );
二、位图服务
该服务主要提供使用位图的功能。结构体定义如下:
typedef struct _TriglavPlugInBitmapService {
TriglavPlugInBitmapCreateProc createProc;
TriglavPlugInBitmapRetainProc retainProc;
TriglavPlugInBitmapReleaseProc releaseProc;
TriglavPlugInBitmapGetWidthProc getWidthProc;
TriglavPlugInBitmapGetHeightProc getHeightProc;
TriglavPlugInBitmapGetDepthProc getDepthProc;
TriglavPlugInBitmapGetScanlineProc getScanlineProc;
TriglavPlugInBitmapGetAddressProc getAddressProc;
TriglavPlugInBitmapGetRowBytesProc getRowBytesProc;
TriglavPlugInBitmapGetPixelBytesProc getPixelBytesProc;
} TriglavPlugInBitmapService;
1. 创建位图对象,不需要时需手动调用函数 releaceProc() 销毁。
/**
* bitmapObject: 位图对象
* width: 宽度(像素)
* height: 高度(像素)
* depth: 颜色深度(字节)
* scanline: 扫描线
**/
TRIGLAV_PLUGIN_API *createProc(
TriglavPlugInBitmapObject* bitmapObject,
const TriglavPlugInInt width,
const TriglavPlugInInt height,
const TriglavPlugInInt depth,
const TriglavPlugInInt scanline );
scanline 可选常量如下:
#define kTriglavPlugInBitmapScanlineHorizontalLeftTop (0x10)
#define kTriglavPlugInBitmapScanlineHorizontalRightTop (0x11)
#define kTriglavPlugInBitmapScanlineHorizontalLeftBottom (0x12)
#define kTriglavPlugInBitmapScanlineHorizontalRightBottom (0x13)
#define kTriglavPlugInBitmapScanlineVerticalLeftTop (0x14)
#define kTriglavPlugInBitmapScanlineVerticalRightTop (0x15)
#define kTriglavPlugInBitmapScanlineVerticalLeftBottom (0x16)
#define kTriglavPlugInBitmapScanlineVerticalRightBottom (0x17)
2. 销毁指定的 bitmap 对象
/**
* bitmapObject: 位图对象
**/
TRIGLAV_PLUGIN_API *releaseProc(
TriglavPlugInBitmapObject bitmapObject );
3. 获取指定 bitmap 对象的宽度
/**
* bitmapObject: 位图对象
* width: 宽度(像素)
**/
TRIGLAV_PLUGIN_API *getWidthProc(
TriglavPlugInBitmapObject bitmapObject,
TriglavPlugInInt* width );
4. 获取指定 bitmap 对象的高度
/**
* bitmapObject: 位图对象
* height: 高度(像素)
**/
TRIGLAV_PLUGIN_API *getHeightProc(
TriglavPlugInBitmapObject bitmapObject,
TriglavPlugInInt* height );
5. 获取指定 bitmap 对象的颜色深度
/**
* bitmapObject: 位图对象
* depth: 颜色深度(字节数)
**/
TRIGLAV_PLUGIN_API *getDepthProc(
TriglavPlugInBitmapObject bitmapObject,
TriglavPlugInInt* depth );
6. 获取指定 bitmap 对象的扫描线
/**
* bitmapObject: 位图对象
* scanline: 扫描线
**/
TRIGLAV_PLUGIN_API *getScanlineProc(
TriglavPlugInBitmapObject bitmapObject,
TriglavPlugInInt* scanline );
7. 获取指定 bitmap 对象的参数 pos 的坐标地址
/**
* bitmapObject: 位图对象
* pos: 坐标
* address: 地址
**/
TRIGLAV_PLUGIN_API *getAddressProc(
TriglavPlugInBitmapObject bitmapObject,
const TriglavPlugInPoint* pos,
TriglavPlugInPtr* address );
8. 获取指定 bitmap 对象的下一列像素的字节数
/**
* bitmapObject: 位图对象
* rowBytes: 到下一列像素的字节数
**/
TRIGLAV_PLUGIN_API *getRowBytesProc(
TriglavPlugInBitmapObject bitmapObject,
TriglavPlugInInt* rowBytes );
9. 获取指定 bitmap 对象的下一行像素的字节数
/**
* bitmapObject: 位图对象
* pixelBytes: 到下一行像素的字节数
**/
TRIGLAV_PLUGIN_API *getPixelBytesProc(
TriglavPlugInBitmapObject bitmapObject,
TriglavPlugInInt* pixelBytes );
以上就是字符串服务和位图服务的全部 api 了,下篇将介绍离屏服务的相关 api。