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


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

    三、离屏服务

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

    1. typedef struct _TriglavPlugInOffscreenService {
    2.     TriglavPlugInOffscreenCreatePlaneProc            createPlaneProc;
    3.     TriglavPlugInOffscreenRetainProc                 retainProc;
    4.     TriglavPlugInOffscreenReleaseProc                releaseProc;
    5.     TriglavPlugInOffscreenGetWidthProc               getWidthProc;
    6.     TriglavPlugInOffscreenGetHeightProc              getHeightProc;
    7.     TriglavPlugInOffscreenGetRectProc                getRectProc;
    8.     TriglavPlugInOffscreenGetExtentRectProc          getExtentRectProc;
    9.     TriglavPlugInOffscreenGetChannelOrderProc        getChannelOrderProc;
    10.     TriglavPlugInOffscreenGetRGBChannelIndexProc     getRGBChannelIndexProc;
    11.     TriglavPlugInOffscreenGetCMYKChannelIndexProc getCMYKChannelIndexProc;
    12.     TriglavPlugInOffscreenGetBlockRectCountProc      getBlockRectCountProc;
    13.     TriglavPlugInOffscreenGetBlockRectProc           getBlockRectProc;
    14.     TriglavPlugInOffscreenGetBlockImageProc          getBlockImageProc;
    15.     TriglavPlugInOffscreenGetBlockAlphaProc          getBlockAlphaProc;
    16.     TriglavPlugInOffscreenGetBlockSelectAreaProc     getBlockSelectAreaProc;
    17.     TriglavPlugInOffscreenGetBlockPlaneProc          getBlockPlaneProc;
    18.     TriglavPlugInOffscreenGetTileWidthProc           getTileWidthProc;
    19.     TriglavPlugInOffscreenGetTileHeightProc          getTileHeightProc;
    20.     TriglavPlugInOffscreenGetBitmapProc              getBitmapProc;
    21.     TriglavPlugInOffscreenSetBitmapProc              setBitmapProc;
    22. } TriglavPlugInOffscreenService;

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

    1. /**
    2.  * offscreenObject: 离屏对象
    3.  * width: 宽度(像素)
    4.  * height: 高度(像素)
    5.  * depth: 颜色深度(字节)
    6. **/
    7. TRIGLAV_PLUGIN_API *createPlaneProc(
    8. TriglavPlugInOffscreenObject* offscreenObject,
    9. const TriglavPlugInInt width,
    10. const TriglavPlugInInt height,
    11. const TriglavPlugInInt depth );

            2. 销毁指定的离屏对象

    1. /**
    2.  * offscreenObject: 离屏对象
    3. **/
    4. TRIGLAV_PLUGIN_API *releaseProc(
    5. TriglavPlugInOffscreenObject offscreenObject );

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

    1. /**
    2.  * offscreenObject: 离屏对象
    3.  * width: 宽度(像素)
    4. **/
    5. TRIGLAV_PLUGIN_API *getWidthProc(
    6. TriglavPlugInOffscreenObject offscreenObject,
    7. TriglavPlugInInt* width );

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

    1. /**
    2.  * offscreenObject: 离屏对象
    3.  * height: 高度(像素)
    4. **/
    5. TRIGLAV_PLUGIN_API *getHeightProc(
    6. TriglavPlugInOffscreenObject offscreenObject,
    7. TriglavPlugInInt* height );

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

    1. /**
    2.  * offscreenObject: 离屏对象
    3.  * rect: 离屏尺寸(像素)
    4. **/
    5. TRIGLAV_PLUGIN_API *getRectProc(
    6. TriglavPlugInOffscreenObject offscreenObject,
    7. TriglavPlugInRect* rect );

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

    1. /**
    2.  * offscreenObject: 离屏对象
    3.  * rect: 绘制区域的外接矩形(像素)
    4. **/
    5. TRIGLAV_PLUGIN_API *getExtentRectProc(
    6. TriglavPlugInOffscreenObject offscreenObject,
    7. TriglavPlugInRect* rect );

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

    1. /**
    2.  * offscreenObject: 离屏对象
    3.  * channelOrder: 通道对齐信息
    4. **/
    5. TRIGLAV_PLUGIN_API *getChannelOrderProc(
    6. TriglavPlugInOffscreenObject offscreenObject,
    7. TriglavPlugInInt* channelOrder );

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

    1. #define    kTriglavPlugInOffscreenChannelOrderAlpha                     (0x01)
    2. #define    kTriglavPlugInOffscreenChannelOrderGrayAlpha                 (0x02)
    3. #define    kTriglavPlugInOffscreenChannelOrderRGBAlpha                  (0x03)
    4. #define    kTriglavPlugInOffscreenChannelOrderCMYKAlpha                 (0x04)
    5. #define    kTriglavPlugInOffscreenChannelOrderBinarizationAlpha         (0x05)
    6. #define    kTriglavPlugInOffscreenChannelOrderBinarizationGrayAlpha (0x06)
    7. #define    kTriglavPlugInOffscreenChannelOrderSelectArea                (0x10)
    8. #define    kTriglavPlugInOffscreenChannelOrderPlane                     (0x20)

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

    1. /**
    2.  * offscreenObject: 离屏对象
    3.  * redChannelIndex: 红色 channel index
    4.  * blueChannelIndex: 蓝色 channel index
    5.  * greenChannelIndex: 绿色 channel index
    6. **/
    7. TRIGLAV_PLUGIN_API *getRGBChannelIndexProc(
    8. TriglavPlugInOffscreenObject offscreenObject,
    9. TriglavPlugInInt* redChannelIndex,
    10. TriglavPlugInInt* blueChannelIndex,
    11. TriglavPlugInInt* greenChannelIndex );

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

    1. /**
    2.  * offscreenObject: 离屏对象
    3.  * cyanChannelIndex: 青色 channel index
    4.  * magentaChannelIndex: 品红色 channel index
    5.  * yellowChannelIndex: 黄色 channel index
    6.  * keytoneChannelIndex: 基调 channel index
    7. **/
    8. TRIGLAV_PLUGIN_API *getCMYKChannelIndexProc(
    9. TriglavPlugInOffscreenObject offscreenObject,
    10. TriglavPlugInInt* cyanChannelIndex,
    11. TriglavPlugInInt* magentaChannelIndex,
    12. TriglavPlugInInt* yellowChannelIndex,
    13. TriglavPlugInInt* keytoneChannelIndex );

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

    1. /**
    2.  * offscreenObject: 离屏对象
    3.  * bounds: 搜索区域
    4.  * blockRectCount: 块数
    5. **/
    6. TRIGLAV_PLUGIN_API *getBlockRectCountProc(
    7. TriglavPlugInOffscreenObject offscreenObject,
    8. TriglavPlugInRect* bounds,
    9. TriglavPlugInInt* blockRectCount);

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

    1. /**
    2.  * offscreenObject: 离屏对象
    3.  * bounds: 搜索区域
    4.  * blockIndex: 块索引
    5.  * blockRect: 块所在区域
    6. **/
    7. TRIGLAV_PLUGIN_API *getBlockRectProc(
    8. TriglavPlugInOffscreenObject offscreenObject,
    9. TriglavPlugInRect* bounds,
    10. TriglavPlugInInt blockIndex,
    11. TriglavPlugInRect* blockRect);

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

    1. /**
    2.  * offscreenObject: 离屏对象
    3.  * pos: 坐标
    4.  * address: 地址
    5.  * rowBytes: 到下一列像素的字节数
    6.  * pixelBytes: 到下一行像素的字节数
    7.  * blockRect: 块所在区域
    8. **/
    9. TRIGLAV_PLUGIN_API *getBlockImageProc(
    10. TriglavPlugInOffscreenObject offscreenObject,
    11. TriglavPlugInPoint* pos,
    12. TriglavPlugInPtr* address,
    13. TriglavPlugInInt* rowBytes,
    14. TriglavPlugInInt* pixelBytes,
    15. TriglavPlugInRect* blockRect);

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

    1. /**
    2.  * offscreenObject: 离屏对象
    3.  * pos: 坐标
    4.  * address: 地址
    5.  * rowBytes: 到下一列像素的字节数
    6.  * pixelBytes: 到下一行像素的字节数
    7.  * blockRect: 块所在区域
    8. **/
    9. TRIGLAV_PLUGIN_API *getBlockAlphaProc(
    10. TriglavPlugInOffscreenObject offscreenObject,
    11. TriglavPlugInPoint* pos,
    12. TriglavPlugInPtr* address,
    13. TriglavPlugInInt* rowBytes,
    14. TriglavPlugInInt* pixelBytes,
    15. TriglavPlugInRect* blockRect);

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

    1. /**
    2.  * offscreenObject: 离屏对象
    3.  * pos: 坐标
    4.  * address: 地址
    5.  * rowBytes: 到下一列像素的字节数
    6.  * pixelBytes: 到下一行像素的字节数
    7.  * blockRect: 块所在区域
    8. **/
    9. TRIGLAV_PLUGIN_API *getBlockSelectAreaProc(
    10. TriglavPlugInOffscreenObject offscreenObject,
    11. TriglavPlugInPoint* pos,
    12. TriglavPlugInPtr* address,
    13. TriglavPlugInInt* rowBytes,
    14. TriglavPlugInInt* pixelBytes,
    15. TriglavPlugInRect* blockRect);

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

    1. /**
    2.  * offscreenObject: 离屏对象
    3.  * pos: 坐标
    4.  * address: 地址
    5.  * rowBytes: 到下一列像素的字节数
    6.  * pixelBytes: 到下一行像素的字节数
    7.  * blockRect: 块所在区域
    8. **/
    9. TRIGLAV_PLUGIN_API *getBlockPlaneProc(
    10. TriglavPlugInOffscreenObject offscreenObject,
    11. TriglavPlugInPoint* pos,
    12. TriglavPlugInPtr* address,
    13. TriglavPlugInInt* rowBytes,
    14. TriglavPlugInInt* pixelBytes,
    15. TriglavPlugInRect* blockRect);

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

    1. /**
    2.  * offscreenObject: 离屏对象
    3.  * tileWidth: 平铺宽度
    4. **/
    5. TRIGLAV_PLUGIN_API *getTileWidthProc(
    6. TriglavPlugInOffscreenObject offscreenObject,
    7. TriglavPlugInInt* tileWidth);

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

    1. /**
    2.  * offscreenObject: 离屏对象
    3.  * tileHeight: 平铺高度
    4. **/
    5. TRIGLAV_PLUGIN_API *getTileHeightProc(
    6. TriglavPlugInOffscreenObject offscreenObject,
    7. TriglavPlugInInt* tileHeight);

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

    1. /**
    2.  * offscreenObject: 离屏对象
    3.  * offscreenPos: 离屏左上角坐标
    4.  * bitmapPos: 位图左上角坐标
    5.  * copyWidth: 复制宽度
    6.  * copyHeight: 复制高度
    7.  * copyMode: 复制模式
    8.  * bitmapObject: 位图对象
    9. **/
    10. TRIGLAV_PLUGIN_API *getBitmapProc(
    11. TriglavPlugInOffscreenObject offscreenObject,
    12. const TriglavPlugInPoint* offscreenPos,
    13. const TriglavPlugInPoint* bitmapPos,
    14. const TriglavPlugInInt copyWidth,
    15. const TriglavPlugInInt copyHeight,
    16. const TriglavPlugInInt copyMode,
    17. TriglavPlugInBitmapObject bitmapObject);

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

    1. #define    kTriglavPlugInOffscreenCopyModeNormal                 (0x01)
    2. #define    kTriglavPlugInOffscreenCopyModeImage                  (0x02)
    3. #define    kTriglavPlugInOffscreenCopyModeGray                   (0x03)
    4. #define    kTriglavPlugInOffscreenCopyModeRed                    (0x04)
    5. #define    kTriglavPlugInOffscreenCopyModeGreen                  (0x05)
    6. #define    kTriglavPlugInOffscreenCopyModeBlue                   (0x06)
    7. #define    kTriglavPlugInOffscreenCopyModeCyan                   (0x07)
    8. #define    kTriglavPlugInOffscreenCopyModeMagenta                (0x08)
    9. #define    kTriglavPlugInOffscreenCopyModeYellow                 (0x09)
    10. #define    kTriglavPlugInOffscreenCopyModeKeyPlate               (0x10)
    11. #define    kTriglavPlugInOffscreenCopyModeAlpha                  (0x11)

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

    1. /**
    2.  * bitmapObject: 位图对象
    3.  * bitmapPos: 位图左上角坐标
    4.  * copyWidth: 复制宽度
    5.  * copyHeight: 复制高度
    6.  * copyMode: 复制模式
    7.  * offscreenObject: 离屏对象
    8.  * offscreenPos: 离屏左上角坐标
    9. **/
    10. TRIGLAV_PLUGIN_API *setBitmapProc(
    11. TriglavPlugInBitmapObject bitmapObject,
    12. const TriglavPlugInPoint* bitmapPos,
    13. const TriglavPlugInInt copyWidth,
    14. const TriglavPlugInInt copyHeight,
    15. const TriglavPlugInInt copyMode,
    16. TriglavPlugInOffscreenObject offscreenObject,
    17. TriglavPlugInPoint* offscreenPos);

    四、离屏服务2

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

    1. typedef struct _TriglavPlugInOffscreenService2 {
    2.     TriglavPlugInOffscreenGetBitmapNormalAlphaChannelIndexProc getBitmapNormalAlphaChannelIndexProc;
    3. } TriglavPlugInOffscreenService2;

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

    1. /**
    2.  * offscreenObject: 离屏对象
    3.  * alphaChannelIndex: alpha channel index
    4. **/
    5. TRIGLAV_PLUGIN_API *getBitmapNormalAlphaChannelIndexProc(
    6. TriglavPlugInOffscreenObject offscreenObject,
    7. TriglavPlugInInt* alphaChannelIndex);

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

  • 相关阅读:
    一、Hadoop初始化配置(final+ubuntu保姆级教程)
    系统架构设计师(第二版)学习笔记----系统分析与设计及测试
    windows下redis设置redis开机自启动方法
    怎么降低Linux内核驱动开发的风险?
    【深度学习】 Python 和 NumPy 系列教程(廿二):Matplotlib详解:2、3d绘图类型(8)3D饼图(3D Pie Chart)
    vue3+vite项目运行报错[plugin vite:dep-pre-bundle]
    Dom4J解析XML、Xpath检索XML
    在 vue3 中使用高德地图
    使用spring注解时@Service注解,在注入时为null的问题
    zabbix 5.0部署
  • 原文地址:https://blog.csdn.net/yang1018679/article/details/127676041