Illustrator中的data filter可以用来读取和写入字节流,这可以用来干很多有趣的事情。如,往硬盘写文件,通过网络发送文件,执行JPEG的编码和解
码,还可以把AI的一些符号导出到GIS的符号库中。
AIDataFilterSuite提供了很多函数来创建读取和写入文件、读取和写入缓存、读取和写入内存块、编码和解码数据、压缩和解压缩数据的filter。
使用SPBasicSuite::AcquireSuite()方法和kAIDataFilterSuite、kAIDataFilterVersion作参数来请求这个Suite。
data filter可以链接在一起。每一个链上的filter都可以得到上个filter输出的数据。如,一个文件filter可以链接到一个ASCII编码的filter上,来构建
一个二进制压缩filter,结果就是在写入文件前压缩和ASCII编码数据。
下面的代码展示了怎样设置一个data filter来执行缓存数据写入文件。注意LinkDataFilter()必须被调用。
AIErr result = kNoErr;
AIDataFilter* dstfilter = NULL;
AIDataFilter* filter;
if (!result)
result = sAIDataFilter->NewFileDataFilter(file, "write", 'ART5', 'TEXT', &filter);
if (!result) {
result = sAIDataFilter->LinkDataFilter(dstfilter, filter);
dstfilter = filter;
}
if (!result)
result = sAIDataFilter->NewBufferDataFilter(32*1024, &filter);
if (!result) {
result = sAIDataFilter->LinkDataFilter(dstfilter, filter);
dstfilter = filter;
}
When you have finished with a filter, you can use the following code to close it.
AIErr result = kNoErr;
while (dstfilter) {
AIErr tmpresult = sAIDataFilter->UnlinkDataFilter(dstfilter, &dstfilter);
if (!result)
result = tmpresult;
}