clip studio paint插件开发之服务套件(二)
创始人
2024-04-03 18:33:02

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

三、离屏服务

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

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,下篇将介绍属性服务相关内容。

相关内容

热门资讯

埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...