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

        本篇接下来介绍离屏服务内容。

三、离屏服务

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

typedef struct _TriglavPlugInOffscreenService {
    TriglavPlugInOffscreenCreatePlaneProc            createPlaneProc;
    TriglavPlugInOffscreenRetainProc                 retainProc;
    TriglavPlugInOffscreenReleaseProc                releaseProc;
    TriglavPlugInOffscreenGetWidthProc               getWidthProc;
    TriglavPlugInOffscreenGetHeightProc              getHeightProc;
    TriglavPlugInOffscreenGetRectProc                getRectProc;
    TriglavPlugInOffscreenGetExtentRectProc          getExtentRectProc;
    TriglavPlugInOffscreenGetChannelOrderProc        getChannelOrderProc;
    TriglavPlugInOffscreenGetRGBChannelIndexProc     getRGBChannelIndexProc;
    TriglavPlugInOffscreenGetCMYKChannelIndexProc    getCMYKChannelIndexProc;
    TriglavPlugInOffscreenGetBlockRectCountProc      getBlockRectCountProc;
    TriglavPlugInOffscreenGetBlockRectProc           getBlockRectProc;
    TriglavPlugInOffscreenGetBlockImageProc          getBlockImageProc;
    TriglavPlugInOffscreenGetBlockAlphaProc          getBlockAlphaProc;
    TriglavPlugInOffscreenGetBlockSelectAreaProc     getBlockSelectAreaProc;
    TriglavPlugInOffscreenGetBlockPlaneProc          getBlockPlaneProc;
    TriglavPlugInOffscreenGetTileWidthProc           getTileWidthProc;
    TriglavPlugInOffscreenGetTileHeightProc          getTileHeightProc;
    TriglavPlugInOffscreenGetBitmapProc              getBitmapProc;
    TriglavPlugInOffscreenSetBitmapProc              setBitmapProc;
} TriglavPlugInOffscreenService;

        1. 为指定的离屏对象创建一个空的离屏,不需要时需手动调用函数 releaceProc() 销毁。

/**
 * offscreenObject: 离屏对象
 * width: 宽度(像素)
 * height: 高度(像素)
 * depth: 颜色深度(字节)
**/
TRIGLAV_PLUGIN_API *createPlaneProc( 
    TriglavPlugInOffscreenObject* offscreenObject, 
    const TriglavPlugInInt width, 
    const TriglavPlugInInt height, 
    const TriglavPlugInInt depth );

        2. 销毁指定的离屏对象

/**
 * offscreenObject: 离屏对象
**/
TRIGLAV_PLUGIN_API *releaseProc( 
    TriglavPlugInOffscreenObject offscreenObject );

        3. 获取指定离屏对象的宽度

/**
 * offscreenObject: 离屏对象
 * width: 宽度(像素)
**/
TRIGLAV_PLUGIN_API *getWidthProc( 
    TriglavPlugInOffscreenObject offscreenObject, 
    TriglavPlugInInt* width );

        4. 获取指定离屏对象的高度

/**
 * offscreenObject: 离屏对象
 * height: 高度(像素)
**/
TRIGLAV_PLUGIN_API *getHeightProc( 
    TriglavPlugInOffscreenObject offscreenObject, 
    TriglavPlugInInt* height );

        5. 获取指定离屏对象的大小

/**
 * offscreenObject: 离屏对象
 * rect: 离屏尺寸(像素)
**/
TRIGLAV_PLUGIN_API *getRectProc( 
    TriglavPlugInOffscreenObject offscreenObject, 
    TriglavPlugInRect* rect );

        6. 获取指定离屏对象的绘制区域的外接矩形

/**
 * offscreenObject: 离屏对象
 * rect: 绘制区域的外接矩形(像素)
**/
TRIGLAV_PLUGIN_API *getExtentRectProc( 
    TriglavPlugInOffscreenObject offscreenObject, 
    TriglavPlugInRect* rect );

        7. 获取指定离屏对象的通道对齐信息

/**
 * offscreenObject: 离屏对象
 * channelOrder: 通道对齐信息
**/
TRIGLAV_PLUGIN_API *getChannelOrderProc( 
    TriglavPlugInOffscreenObject offscreenObject, 
    TriglavPlugInInt* channelOrder );

        获取的 channel order 为下述常量之一:

#define    kTriglavPlugInOffscreenChannelOrderAlpha                     (0x01)
#define    kTriglavPlugInOffscreenChannelOrderGrayAlpha                 (0x02)
#define    kTriglavPlugInOffscreenChannelOrderRGBAlpha                  (0x03)
#define    kTriglavPlugInOffscreenChannelOrderCMYKAlpha                 (0x04)
#define    kTriglavPlugInOffscreenChannelOrderBinarizationAlpha         (0x05)
#define    kTriglavPlugInOffscreenChannelOrderBinarizationGrayAlpha     (0x06)
#define    kTriglavPlugInOffscreenChannelOrderSelectArea                (0x10)
#define    kTriglavPlugInOffscreenChannelOrderPlane                     (0x20)

        8. 获取指定离屏对象的 RGB channel index

/**
 * offscreenObject: 离屏对象
 * redChannelIndex: 红色 channel index
 * blueChannelIndex: 蓝色 channel index
 * greenChannelIndex: 绿色 channel index
**/
TRIGLAV_PLUGIN_API *getRGBChannelIndexProc( 
    TriglavPlugInOffscreenObject offscreenObject, 
    TriglavPlugInInt* redChannelIndex, 
    TriglavPlugInInt* blueChannelIndex, 
    TriglavPlugInInt* greenChannelIndex );

        9. 获取指定离屏对象的 CMYK channel index

/**
 * offscreenObject: 离屏对象
 * cyanChannelIndex: 青色 channel index
 * magentaChannelIndex: 品红色 channel index
 * yellowChannelIndex: 黄色 channel index
 * keytoneChannelIndex: 基调 channel index
**/
TRIGLAV_PLUGIN_API *getCMYKChannelIndexProc( 
    TriglavPlugInOffscreenObject offscreenObject, 
    TriglavPlugInInt* cyanChannelIndex, 
    TriglavPlugInInt* magentaChannelIndex, 
    TriglavPlugInInt* yellowChannelIndex, 
    TriglavPlugInInt* keytoneChannelIndex );

        10. 获取指定区域的指定离屏对象的块数

/**
 * offscreenObject: 离屏对象
 * bounds: 搜索区域
 * blockRectCount: 块数
**/
TRIGLAV_PLUGIN_API *getBlockRectCountProc( 
    TriglavPlugInOffscreenObject offscreenObject, 
    TriglavPlugInRect* bounds, 
    TriglavPlugInInt* blockRectCount);

        11. 在指定区域中获取指定离屏对象块的区域

/**
 * offscreenObject: 离屏对象
 * bounds: 搜索区域
 * blockIndex: 块索引
 * blockRect: 块所在区域
**/
TRIGLAV_PLUGIN_API *getBlockRectProc( 
    TriglavPlugInOffscreenObject offscreenObject, 
    TriglavPlugInRect* bounds, 
    TriglavPlugInInt blockIndex, 
    TriglavPlugInRect* blockRect);

        12. 在指定的离屏对象中根据指定坐标获取图像地址、到下一列像素的字节数、到下一行像素的字节数以及块的大小

/**
 * offscreenObject: 离屏对象
 * pos: 坐标
 * address: 地址
 * rowBytes: 到下一列像素的字节数
 * pixelBytes: 到下一行像素的字节数
 * blockRect: 块所在区域
**/
TRIGLAV_PLUGIN_API *getBlockImageProc( 
    TriglavPlugInOffscreenObject offscreenObject, 
    TriglavPlugInPoint* pos, 
    TriglavPlugInPtr* address, 
    TriglavPlugInInt* rowBytes, 
    TriglavPlugInInt* pixelBytes, 
    TriglavPlugInRect* blockRect);

        13. 在指定的离屏对象中根据指定坐标获取 alpha 地址、到下一列像素的字节数、到下一行像素的字节数以及块的大小

/**
 * offscreenObject: 离屏对象
 * pos: 坐标
 * address: 地址
 * rowBytes: 到下一列像素的字节数
 * pixelBytes: 到下一行像素的字节数
 * blockRect: 块所在区域
**/
TRIGLAV_PLUGIN_API *getBlockAlphaProc( 
    TriglavPlugInOffscreenObject offscreenObject, 
    TriglavPlugInPoint* pos, 
    TriglavPlugInPtr* address, 
    TriglavPlugInInt* rowBytes, 
    TriglavPlugInInt* pixelBytes, 
    TriglavPlugInRect* blockRect);

        14. 在指定的离屏对象中根据指定坐标获取选择区域地址、到下一列像素的字节数、到下一行像素的字节数以及块的大小

/**
 * offscreenObject: 离屏对象
 * pos: 坐标
 * address: 地址
 * rowBytes: 到下一列像素的字节数
 * pixelBytes: 到下一行像素的字节数
 * blockRect: 块所在区域
**/
TRIGLAV_PLUGIN_API *getBlockSelectAreaProc( 
    TriglavPlugInOffscreenObject offscreenObject, 
    TriglavPlugInPoint* pos, 
    TriglavPlugInPtr* address, 
    TriglavPlugInInt* rowBytes, 
    TriglavPlugInInt* pixelBytes, 
    TriglavPlugInRect* blockRect);

        15. 在指定的离屏对象中根据指定坐标获取屏幕地址、到下一列像素的字节数、到下一行像素的字节数以及块的大小

/**
 * offscreenObject: 离屏对象
 * pos: 坐标
 * address: 地址
 * rowBytes: 到下一列像素的字节数
 * pixelBytes: 到下一行像素的字节数
 * blockRect: 块所在区域
**/
TRIGLAV_PLUGIN_API *getBlockPlaneProc(
    TriglavPlugInOffscreenObject offscreenObject, 
    TriglavPlugInPoint* pos, 
    TriglavPlugInPtr* address, 
    TriglavPlugInInt* rowBytes, 
    TriglavPlugInInt* pixelBytes, 
    TriglavPlugInRect* blockRect);

        16. 获取指定离屏对象的主机设置平铺宽度

/**
 * offscreenObject: 离屏对象
 * tileWidth: 平铺宽度
**/
TRIGLAV_PLUGIN_API *getTileWidthProc(
    TriglavPlugInOffscreenObject offscreenObject, 
    TriglavPlugInInt* tileWidth);

        17. 获取指定离屏对象的主机设置平铺高度

/**
 * offscreenObject: 离屏对象
 * tileHeight: 平铺高度
**/
TRIGLAV_PLUGIN_API *getTileHeightProc(
    TriglavPlugInOffscreenObject offscreenObject, 
    TriglavPlugInInt* tileHeight);

        18. 从指定的离屏对象创建并获取位图对象

/**
 * offscreenObject: 离屏对象
 * offscreenPos: 离屏左上角坐标
 * bitmapPos: 位图左上角坐标
 * copyWidth: 复制宽度
 * copyHeight: 复制高度
 * copyMode: 复制模式
 * bitmapObject: 位图对象
**/
TRIGLAV_PLUGIN_API *getBitmapProc(
    TriglavPlugInOffscreenObject offscreenObject, 
    const TriglavPlugInPoint* offscreenPos, 
    const TriglavPlugInPoint* bitmapPos, 
    const TriglavPlugInInt copyWidth, 
    const TriglavPlugInInt copyHeight, 
    const TriglavPlugInInt copyMode, 
    TriglavPlugInBitmapObject bitmapObject);

        复制模式取下列常量之一:

#define    kTriglavPlugInOffscreenCopyModeNormal                 (0x01)
#define    kTriglavPlugInOffscreenCopyModeImage                  (0x02)
#define    kTriglavPlugInOffscreenCopyModeGray                   (0x03)
#define    kTriglavPlugInOffscreenCopyModeRed                    (0x04)
#define    kTriglavPlugInOffscreenCopyModeGreen                  (0x05)
#define    kTriglavPlugInOffscreenCopyModeBlue                   (0x06)
#define    kTriglavPlugInOffscreenCopyModeCyan                   (0x07)
#define    kTriglavPlugInOffscreenCopyModeMagenta                (0x08)
#define    kTriglavPlugInOffscreenCopyModeYellow                 (0x09)
#define    kTriglavPlugInOffscreenCopyModeKeyPlate               (0x10)
#define    kTriglavPlugInOffscreenCopyModeAlpha                  (0x11)

        19. 根据指定的位图对象设置离屏对象

/**
 * bitmapObject: 位图对象
 * bitmapPos: 位图左上角坐标
 * copyWidth: 复制宽度
 * copyHeight: 复制高度
 * copyMode: 复制模式
 * offscreenObject: 离屏对象
 * offscreenPos: 离屏左上角坐标
**/
TRIGLAV_PLUGIN_API *setBitmapProc(
    TriglavPlugInBitmapObject bitmapObject, 
    const TriglavPlugInPoint* bitmapPos, 
    const TriglavPlugInInt copyWidth, 
    const TriglavPlugInInt copyHeight, 
    const TriglavPlugInInt copyMode, 
    TriglavPlugInOffscreenObject offscreenObject, 
    TriglavPlugInPoint* offscreenPos);

四、离屏服务2

        该服务主要提供处理离屏的功能,结构体定义如下:

typedef struct _TriglavPlugInOffscreenService2 {
    TriglavPlugInOffscreenGetBitmapNormalAlphaChannelIndexProc   getBitmapNormalAlphaChannelIndexProc;
} TriglavPlugInOffscreenService2;

        1. 获取复制模式为 kTriglavPlugInOffscreenCopyModeNormal 时的 channel index

/**
 * offscreenObject: 离屏对象
 * alphaChannelIndex: alpha channel index
**/
TRIGLAV_PLUGIN_API *getBitmapNormalAlphaChannelIndexProc(
    TriglavPlugInOffscreenObject offscreenObject, 
    TriglavPlugInInt* alphaChannelIndex);

        以上就是离屏服务的 api,下篇将介绍属性服务相关内容。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值