• clipStudioPaint插件开发之服务套件(一)


            服务套件提供了可在插件模块端使用的功能。服务套件函数返回两个 TriglavPlugInInt 类型的常量。 返回 kTriglavPlugInAPIResultSuccess 表示成功,返回 kTriglavPlugInAPIResultFailed 表示操作失败。
            先看看插件服务器跟各个服务套件是如何关联起来的:

    1. // 插件服务器
    2. typedef struct _TriglavPlugInServer {
    3.     TriglavPlugInRecordSuite recordSuite;
    4.     TriglavPlugInServiceSuite       serviceSuite;
    5.     TriglavPlugInHostObject         hostObject;
    6. } TriglavPlugInServer;
    7. // 插件服务套件
    8. typedef struct _TriglavPlugInServiceSuite {
    9.     TriglavPlugInStringService* stringService;
    10.     TriglavPlugInBitmapService*     bitmapService;
    11.     TriglavPlugInOffscreenService*  offscreenService;
    12.     TriglavPlugInPropertyService*   propertyService;
    13.     TriglavPlugInOffscreenService2* offscreenService2;
    14.     TriglavPlugInPropertyService2*     propertyService2;
    15.     ...
    16. } TriglavPlugInServiceSuite;

            本篇介绍字符串服务和位图服务。

    一、字符串服务

            该服务主要提供处理字符串的功能。结构体定义如下:

    1. typedef struct _TriglavPlugInStringService {
    2.     TriglavPlugInStringCreateWithAsciiStringProc createWithAsciiStringProc;
    3.     TriglavPlugInStringCreateWithUnicodeStringProc createWithUnicodeStringProc;
    4.     TriglavPlugInStringCreateWithLocalCodeStringProc createWithLocalCodeStringProc;
    5.     TriglavPlugInStringCreateWithStringIDProc createWithStringIDProc;
    6.     TriglavPlugInStringRetainProc retainProc;
    7.     TriglavPlugInStringReleaseProc releaseProc;
    8.     TriglavPlugInStringGetUnicodeCharsProc getUnicodeCharsProc;
    9.     TriglavPlugInStringGetUnicodeLengthProc getUnicodeLengthProc;
    10.     TriglavPlugInStringGetLocalCodeCharsProc getLocalCodeCharsProc;
    11.     TriglavPlugInStringGetLocalCodeLengthProc getLocalCodeLengthProc;
    12. } TriglavPlugInStringService;

            1. 从给定的 ascii 字符串创建一个字符串对象,不需要时需手动调用函数 releaceProc() 销毁。

    1. /**
    2.  * stringObject: 字符串对象
    3.  * ascii: ascii 字符串
    4.  * length: ascii 字符串长度
    5. **/
    6. TRIGLAV_PLUGIN_API *createWithAsciiStringProc(
    7. TriglavPlugInStringObject* stringObject,
    8. const TriglavPlugInChar* ascii,
    9. const TriglavPlugInInt length);

            2. 从给定的 unicode 字符串创建一个字符串对象,不需要时需手动调用函数 releaceProc() 销毁。

    1. /**
    2.  * stringObject: 字符串对象
    3.  * unicode: unicode 字符串
    4.  * length: unicode 字符串长度
    5. **/
    6. TRIGLAV_PLUGIN_API *createWithUnicodeStringProc(
    7. TriglavPlugInStringObject* stringObject,
    8. const TriglavPlugInUniChar* unicode,
    9. const TriglavPlugInInt length );

            3. 从指定的本地代码字符串创建字符串对象,不需要时需手动调用函数 releaceProc() 销毁。

    1. /**
    2.  * stringObject: 字符串对象
    3.  * localcode: 本地代码字符串
    4.  * length: 本地代码字符串长度
    5. **/
    6. TRIGLAV_PLUGIN_API *createWithLocalCodeStringProc(
    7. TriglavPlugInStringObject* stringObject,
    8. const TriglavPlugInChar* localcode,
    9. const TriglavPlugInInt length);

            4. 根据指定的资源标识符创建字符串对象,不需要时需手动调用函数 releaceProc() 销毁。

    1. /**
    2.  * stringObject: 字符串对象
    3.  * stringID: 资源标识符
    4.  * hostObject: 宿主对象
    5. **/
    6. TRIGLAV_PLUGIN_API *createWithStringIDProc(
    7. TriglavPlugInStringObject* stringObject,
    8. const TriglavPlugInInt stringID,
    9. TriglavPlugInHostObject hostObject);

            这里的 stringID 获取需要注意平台:
            windows: 请使用 Visula Studio 的 String Table。将这里设置的值代入自变量 stringID 中,就会生成与之对应的字符串对象;
            mac: 请使用 Localizable.strings。将这里设置的值代入自变量 stringID 中,就会生成与之对应的字符串对象。

            5. 销毁指定的字符串对象

    1. /**
    2.  * stringObject: 字符串对象
    3. **/
    4. TRIGLAV_PLUGIN_API *releaseProc(
    5. TriglavPlugInStringObject stringObject);

            6. 从指定的字符串对象获取 unicode 字符串

    1. /**
    2.  * unicode: unicode 字符串
    3.  * stringObject: 字符串对象
    4. **/
    5. TRIGLAV_PLUGIN_API *getUnicodeCharsProc(
    6. const TriglavPlugInUniChar** unicode,
    7. TriglavPlugInStringObject stringObject);

            7. 从指定的字符串对象获取 unicode 字符串长度

    1. /**
    2.  * length: unicode 字符串长度
    3.  * stringObject: 字符串对象
    4. **/
    5. TRIGLAV_PLUGIN_API *getUnicodeLengthProc(
    6. TriglavPlugInInt* length,
    7. TriglavPlugInStringObject stringObject);

            8. 从指定的字符串对象获取本地代码字符串

    1. /**
    2.  * localcode: 本地代码字符串
    3.  * stringObject: 字符串对象
    4. **/
    5. TRIGLAV_PLUGIN_API *getLocalCodeCharsProc(
    6. const TriglavPlugInUniChar** localcode,
    7. TriglavPlugInStringObject stringObject );

            9. 从指定的字符串对象获取本地代码字符串长度

    1. /**
    2.  * length: 本地代码字符串长度
    3.  * stringObject: 字符串对象
    4. **/
    5. TRIGLAV_PLUGIN_API *getLocalCodeLengthProc(
    6. TriglavPlugInInt* length,
    7. TriglavPlugInStringObject stringObject );

    二、位图服务

            该服务主要提供使用位图的功能。结构体定义如下:

    1. typedef struct _TriglavPlugInBitmapService {
    2.     TriglavPlugInBitmapCreateProc               createProc;
    3.     TriglavPlugInBitmapRetainProc               retainProc;
    4.     TriglavPlugInBitmapReleaseProc              releaseProc;
    5.     TriglavPlugInBitmapGetWidthProc             getWidthProc;
    6.     TriglavPlugInBitmapGetHeightProc            getHeightProc;
    7.     TriglavPlugInBitmapGetDepthProc             getDepthProc;
    8.     TriglavPlugInBitmapGetScanlineProc          getScanlineProc;
    9.     TriglavPlugInBitmapGetAddressProc           getAddressProc;
    10.     TriglavPlugInBitmapGetRowBytesProc          getRowBytesProc;
    11.     TriglavPlugInBitmapGetPixelBytesProc getPixelBytesProc;
    12. } TriglavPlugInBitmapService;

            1. 创建位图对象,不需要时需手动调用函数 releaceProc() 销毁。

    1. /**
    2.  * bitmapObject: 位图对象
    3.  * width: 宽度(像素)
    4.  * height: 高度(像素)
    5.  * depth: 颜色深度(字节)
    6.  * scanline: 扫描线
    7. **/
    8. TRIGLAV_PLUGIN_API *createProc(
    9. TriglavPlugInBitmapObject* bitmapObject,
    10. const TriglavPlugInInt width,
    11. const TriglavPlugInInt height,
    12. const TriglavPlugInInt depth,
    13. const TriglavPlugInInt scanline );

            scanline 可选常量如下:

    1. #define    kTriglavPlugInBitmapScanlineHorizontalLeftTop (0x10)
    2. #define    kTriglavPlugInBitmapScanlineHorizontalRightTop (0x11)
    3. #define    kTriglavPlugInBitmapScanlineHorizontalLeftBottom     (0x12)
    4. #define    kTriglavPlugInBitmapScanlineHorizontalRightBottom (0x13)
    5. #define    kTriglavPlugInBitmapScanlineVerticalLeftTop          (0x14)
    6. #define    kTriglavPlugInBitmapScanlineVerticalRightTop         (0x15)
    7. #define    kTriglavPlugInBitmapScanlineVerticalLeftBottom       (0x16)
    8. #define    kTriglavPlugInBitmapScanlineVerticalRightBottom      (0x17)

            2. 销毁指定的 bitmap 对象

    1. /**
    2.  * bitmapObject: 位图对象
    3. **/
    4. TRIGLAV_PLUGIN_API *releaseProc(
    5. TriglavPlugInBitmapObject bitmapObject );

            3. 获取指定 bitmap 对象的宽度

    1. /**
    2.  * bitmapObject: 位图对象
    3.  * width: 宽度(像素)
    4. **/
    5. TRIGLAV_PLUGIN_API *getWidthProc(
    6. TriglavPlugInBitmapObject bitmapObject,
    7. TriglavPlugInInt* width );

            4. 获取指定 bitmap 对象的高度

    1. /**
    2.  * bitmapObject: 位图对象
    3.  * height: 高度(像素)
    4. **/
    5. TRIGLAV_PLUGIN_API *getHeightProc(
    6. TriglavPlugInBitmapObject bitmapObject,
    7. TriglavPlugInInt* height );

            5. 获取指定 bitmap 对象的颜色深度

    1. /**
    2.  * bitmapObject: 位图对象
    3.  * depth: 颜色深度(字节数)
    4. **/
    5. TRIGLAV_PLUGIN_API *getDepthProc(
    6. TriglavPlugInBitmapObject bitmapObject,
    7. TriglavPlugInInt* depth );

            6. 获取指定 bitmap 对象的扫描线

    1. /**
    2.  * bitmapObject: 位图对象
    3.  * scanline: 扫描线
    4. **/
    5. TRIGLAV_PLUGIN_API *getScanlineProc(
    6. TriglavPlugInBitmapObject bitmapObject,
    7. TriglavPlugInInt* scanline );

            7. 获取指定 bitmap 对象的参数 pos 的坐标地址

    1. /**
    2.  * bitmapObject: 位图对象
    3.  * pos: 坐标
    4.  * address: 地址
    5. **/
    6. TRIGLAV_PLUGIN_API *getAddressProc(
    7. TriglavPlugInBitmapObject bitmapObject,
    8. const TriglavPlugInPoint* pos,
    9. TriglavPlugInPtr* address );

            8. 获取指定 bitmap 对象的下一列像素的字节数

    1. /**
    2.  * bitmapObject: 位图对象
    3.  * rowBytes: 到下一列像素的字节数
    4. **/
    5. TRIGLAV_PLUGIN_API *getRowBytesProc(
    6. TriglavPlugInBitmapObject bitmapObject,
    7. TriglavPlugInInt* rowBytes );

            9. 获取指定 bitmap 对象的下一行像素的字节数

    1. /**
    2.  * bitmapObject: 位图对象
    3.  * pixelBytes: 到下一行像素的字节数
    4. **/
    5. TRIGLAV_PLUGIN_API *getPixelBytesProc(
    6. TriglavPlugInBitmapObject bitmapObject,
    7. TriglavPlugInInt* pixelBytes );

            以上就是字符串服务和位图服务的全部 api 了,下篇将介绍离屏服务的相关 api

  • 相关阅读:
    Allure精通指南(02)Mac和Windows系统环境配置
    一文搞懂可重入和线程安全
    UltraISO 制作U盘启动盘
    【前端进阶】-TypeScript类型声明文件详解及使用说明
    JAVA创新创业教育中心项目申报管理系统计算机毕业设计Mybatis+系统+数据库+调试部署
    nuxt2框架知识总结
    【论文精读】The Missing Link: Finding label relations across datasets
    FPGA学习笔记(七)verilog的深入学习之任务与函数(语法篇3)
    NDK环境搭建,以Windows平台为例
    leetcode(力扣) 128. 最长连续序列(哈希)
  • 原文地址:https://blog.csdn.net/yang1018679/article/details/127656685