clip studio paint插件开发之服务套件(一)

        服务套件提供了可在插件模块端使用的功能。服务套件函数返回两个 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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值