您当前的位置: 首页 > 

插件开发

暂无认证

  • 3浏览

    0关注

    492博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

adobe插件开发-栅格数据-raster-数据处理-文档数据

插件开发 发布时间:2022-03-11 07:30:19 ,浏览量:3

文章目录
    • 1.功能描述
    • 2.通道交叉
    • 3.作者答疑
  该套件提供了访问和修改与kRasterArt类型的艺术对象关联的数据的功能。

1.功能描述

  (使用AIArtSuite、AIMatchingArtSuite或AIArtSetSuite创建或访问栅格艺术对象本身。)

  使用SPBasicSuite::AcquireSuite()和常量kAIRasterSuite和kAIRasterVersion获取这个套件。   与栅格对象相关的对象art是由其像素数据和在文档中定位像素数据的矩阵定义的。此信息保存在与栅格art对象关联的AIRasterRecord中。这个套件允许你将栅格数据作为一个整体来处理,例如通过获取和设置它的转换矩阵;或者在像素级使用tile函数。   当您使用AIArtSuite::NewArt()创建一个栅格art对象时,相关栅格记录中的所有值都初始化为零。使用GetRasterInfo()从新的art对象中检索结构,并使用SetRasterInfo()更新对象。   使用SetRasterInfo()设置包含像素映射的矩形。这不是Illustrator计算和提供的art边框的同一个矩形。光栅art对象的起源在左上角;光栅对象的坐标系统相对于Illustrator画板坐标系统在垂直轴上是倒置的。   光栅对象中的所有像素数据使用每英寸72像素(PPI)的基本分辨率。不能直接指定分辨率;它是由边界和栅格矩阵组成的。对于一个一英寸的正方形图像,72 PPI,光栅矩阵的比例分量被设置为1.0,界限将是72 x 72。要创建一个300ppi的1英寸正方形图像,设置边界为300 x 300;刻度变为0.24(72/300)。   将本地像素数据保存在tile (AITile)中。使用GetRasterTile()从像素映射中检索像素并创建一个tile,使用SetRasterTile()将像素信息从tile复制到像素映射中。   在栅格艺术对象和本地数据缓冲区(tile)之间复制或替换图像数据时,一次处理所有信息可能是不切实际的。您可以定义并使用称为片的更实用的数据子集。切片在复制数据的函数(GetRasterTile和SetRasterTile())的形参中定义。   AITile结构中的切片定义了平铺(要复制或替换的区域),另外的切片为光栅艺术对象(artSlice)和本地数据缓冲区(workSlice)定义。源文件控制传输的方式:   从栅格art对象复制到本地数据时,GetRasterTile()会在art切片上迭代。   从本地数据复制到栅格art对象时,SetRasterTile()在工作片上迭代。

2.通道交叉

  连同切片信息(见AISlice), channelInterleave数组指定了在栅格art对象和tile数据缓冲区之间传输时如何改变组成像素的字节顺序。当在相似但不相同的颜色格式之间进行转换时,这是很有用的。   该数组包含每个通道的值,或要传输的颜色字节。值的数组索引为从内部位图读取的字节指定源。数组值将对应的字节映射到目标位置。   如果数据顺序没有改变,数组将是:

myTile.channelInterleave [0] = 0;
myTile.channelInterleave [1] = 1;
myTile.channelInterleave [2] = 2;
myTile.channelInterleave [3] = 3;

  使用通道交错的一个例子是从内部RGB格式传输到Mac OS GWorld像素图。内部格式按照R G B的顺序使用3个字节来定义一个像素。GWorld在顺序A R G B中使用4个字节,其中A字节是alpha通道信息。

  当栅格Art对象和GWorld之间传输时,通道交错指定了这两种不兼容的形式之间的映射。要从光栅对象转移到GWorld,可以使用以下映射:

GWorldTile.channelInterleave [0] = 1;//将24位红色值映射为32位红色值
GWorldTile.channelInterleave [1] = 2;//将24位绿色值映射到32位绿色值
GWorldTile.channelInterleave [2] = 3;//将24位的蓝色值映射为32位的蓝色值
GWorldTile.channelInterleave [3] = 0;//未使用,由片定义处理

  只有三个通道被映射。GWorld的alpha通道没有接收到任何信息。要从GWorld转换回光栅对象,可以使用以下映射:

GWorldTile.channelInterleave [0] = 0;// Alpha通道被忽略,由片定义处理
GWorldTile.channelInterleave [1] = 0;//将32位的红色值映射为24位的红色值
GWorldTile.channelInterleave [2] = 1;//将32位绿色值映射为24位绿色值
GWorldTile.channelInterleave [3] = 2;//将32位蓝色值映射为24位蓝色值

  这里的数据在alpha通道的GWorld是不被传输回光栅对象。这个例子设置了艺术对象片的前值和后值来限制channelInterleave数组:

GWorldTile.channelInterleave [0] = 1;//将24位红色值映射为32位红色值
GWorldTile.channelInterleave [1] = 2;//将24位绿色值映射到32位绿色值
GWorldTile.channelInterleave [2] = 3;//将24位的蓝色值映射为32位的蓝色值
GWorldTile.channelInterleave [3] = 0;//未使用,由片定义处理
artSlice.front = 0;
artSlice.back= 3;

  因为artSlice。背设为3,只复制前三个通道的颜色信息。当将数据从GWorld传送回光栅艺术对象时,GWorld的切片控制通道交错。为了跳过alpha通道,GWorldSlice.front被设置为通道1,导致通道0被忽略。

GWorldTile.channelInterleave [0] = 0;// Alpha通道被忽略,由片定义处理
GWorldTile.channelInterleave [1] = 0;//将32位的红色值映射为24位的红色值
GWorldTile.channelInterleave [2] = 1;//将32位绿色值映射为24位绿色值
GWorldTile.channelInterleave [3] = 2;//将32位蓝色值映射为24位蓝色值
GWorldSlice.front = 1;
GWorldSlice.back = 4;
3.作者答疑

  如有疑问,请留言。

提示: 作者知了-联系方式1 提示: 作者知了-联系方式2

关注
打赏
1665481431
查看更多评论
立即登录/注册

微信扫码登录

0.0395s