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

### Clip Studio Paint 技术支持和常见问题解答 #### 安装与激活 Clip Studio Paint 提供了多平台的支持,无论是 Windows 还是 MacOS 用户都可以找到适合自己系统的安装包[^3]。对于初次使用者来说,简体中文界面大大降低了学习成本,使得更多中文用户可以轻松上手。 如果遇到无法启动程序的情况,建议先确认操作系统版本是否符合最低配置要求,并尝试重新下载最新版本的安装文件进行覆盖安装。此外,在线激活过程中出现问题时,可以通过官方提供的序列号手动输入方式进行激活。 #### 笔刷设置异常 当发现自定义笔刷效果不理想或者预设笔刷丢失时,这可能是由于设置了错误的工作环境或者是缓存数据冲突所致。此时应该检查当前画布分辨率以及图层属性设定;也可以通过清除临时文件夹内的残留记录来解决问题。 ```python import os temp_path = "C:\\Users\\YourUsername\\AppData\\Local\\Temp" for root, dirs, files in os.walk(temp_path): for file in files: try: os.remove(os.path.join(root, file)) except Exception as e: print(f"Failed to delete {file}. Reason: {e}") ``` #### 文件导入导出失败 针对素材资源无法正常加载或是保存作品时报错的现象,首先要核实所使用的文件格式是否被 CSP 所兼容。通常情况下,JPEG、PNG 和 PSD 等常用图片格式均能顺利处理。另外需要注意的是,部分特殊功能可能仅限于特定付费版本才能解锁使用。 为了防止意外情况发生而导致的数据损失风险,养成定期备份的习惯非常重要。利用 CSP 自带的功能创建增量副本或将重要文档同步至云端存储空间都是不错的选择。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值