# soImage 库模块帮助文档

## soImage 成员列表 <a id="soImage" href="#soImage">&#x23;</a>

### soImage() <a id="soImage()" href="#soImage()">&#x23;</a>
创建图像  

[返回对象:soImageObject](#soImageObject)

### soImage.checkType("*.bmp") <a id="soImage.checkType" href="#soImage.checkType">&#x23;</a>
参数为图像路径或文件名,  
返回数值格式的图像数型

### soImage.gifFile("GIF文件路径",循环次数,注释) <a id="soImage.gifFile" href="#soImage.gifFile">&#x23;</a>
创建GIF文件  
消除方法指的是下一帧擦除上帧背景的方法,可选1,2,3

### soImage.gifFile() <a id="soImage.gifFile" href="#soImage.gifFile">&#x23;</a>
[返回对象:soImageGifFileObject](#soImageGifFileObject)

## soImageObject 成员列表 <a id="soImageObject" href="#soImageObject">&#x23;</a>

### soImageObject.bpp <a id="soImageObject.bpp" href="#soImageObject.bpp">&#x23;</a>
修改或获取图像位宽

### soImageObject.bpp(8) <a id="soImageObject.bpp" href="#soImageObject.bpp">&#x23;</a>
修改图像位宽  
参数为0是获取图像当前位宽

### soImageObject.bpp(8,true) <a id="soImageObject.bpp" href="#soImageObject.bpp">&#x23;</a>
修改图像位宽，允许误差扩散

### soImageObject.capture(窗口句柄,x坐标,y坐标,宽度,高度,鼠标放大百分比) <a id="soImageObject.capture" href="#soImageObject.capture">&#x23;</a>
抓屏,所有参数可选,  
如果不指定鼠标放大百分比则不截图不含鼠标指针,  
放大百分比为 100 表示指针原始大小,忽略系统鼠标放大设置,  
此函数会自动清屏并调整为合适图像位宽（BPP）  
明确指定窗口或坐标缩小抓屏面积可优化性能，  
使用 win.getScreenPos 可获取一个或多个显示器组成的虚拟屏幕位置与大小

### soImageObject.captureWindow <a id="soImageObject.captureWindow" href="#soImageObject.captureWindow">&#x23;</a>
在屏幕上抓取指定窗口的图像。  
当指定窗口句柄时 capture 函数在窗口内截图。  
但 captureWindow 是在屏幕上截取指定窗口区域的图像。  
这两个函数的实现是不同的，对于窗口截图，captureWindow 的兼容性更好。

### soImageObject.captureWindow(窗口句柄,x坐标,y坐标,宽度,高度) <a id="soImageObject.captureWindow" href="#soImageObject.captureWindow">&#x23;</a>
在屏幕上抓取指定窗口客户区（不含标题栏）的图像。  
除窗口句柄以外其他参数可选。

### soImageObject.captureWindow(窗口句柄,x坐标,y坐标,宽度,高度,true) <a id="soImageObject.captureWindow" href="#soImageObject.captureWindow">&#x23;</a>
在屏幕上抓取指定窗口（含标题栏）的图像。  
除窗口句柄以外其他参数可选。

### soImageObject.clear() <a id="soImageObject.clear" href="#soImageObject.clear">&#x23;</a>
清空图像

### soImageObject.cmp(匹配图像) <a id="soImageObject.cmp" href="#soImageObject.cmp">&#x23;</a>
返回图像差异值，完全相似返回0 完全不相似为两个图片的面积相加,  
精确匹配能力一般，模糊识别的能力较强

### soImageObject.cmp2(匹配图像) <a id="soImageObject.cmp2" href="#soImageObject.cmp2">&#x23;</a>
返回差异值，完全一样为0，完全不一样为1，通常返回的是1到0之间的小数，数字越小表示两个图片越接近相似,  
精确匹配能力较差，模糊识别的能力一般

### soImageObject.cmp3(匹配图像) <a id="soImageObject.cmp3" href="#soImageObject.cmp3">&#x23;</a>
返回相似度，完全一样为0，完全相似返回0 完全不相似为单个图片的面积  
精确匹配能力最强，模糊识别的能力最差

### soImageObject.copy <a id="soImageObject.copy" href="#soImageObject.copy">&#x23;</a>
复制图像

### soImageObject.copy() <a id="soImageObject.copy" href="#soImageObject.copy">&#x23;</a>
复制图像  

[返回对象:soImageObject](#soImageObject)

### soImageObject.copy(左,上,右,下) <a id="soImageObject.copy" href="#soImageObject.copy">&#x23;</a>
复制并剪切图像，  
返回新图像，不会修改原图

### soImageObject.crop(左,上,右,下) <a id="soImageObject.crop" href="#soImageObject.crop">&#x23;</a>
剪切图像

### soImageObject.decreaseBpp <a id="soImageObject.decreaseBpp" href="#soImageObject.decreaseBpp">&#x23;</a>
生成最优调色版并降低像素位宽为 8 位。  
此函数专用于生成颜色更加自然的 GIF 文件。

### soImageObject.decreaseBpp(bpp,colors,colorBits,errorDiffusion) <a id="soImageObject.decreaseBpp" href="#soImageObject.decreaseBpp">&#x23;</a>
生成最优调色版并降低像素位宽为 8 位。  
此函数专用于生成颜色更加自然的 GIF 文件。  

@bpp 参数请指定为 8，其他参数不必指定。  
可选用 @colors 参数指定最大颜色数。  
@colorBits 指定颜色分量有效位数，应指定为 8 或省略。  
@errorDiffusion 可选指定是否允许误差扩散

### soImageObject.delete() <a id="soImageObject.delete" href="#soImageObject.delete">&#x23;</a>
删除图像

### soImageObject.findColor(匹配颜色,x坐标,y坐标,结束x坐标,结束y坐标) <a id="soImageObject.findColor" href="#soImageObject.findColor">&#x23;</a>
找色，除参数@1以外，所有参数可选,  
参数@1使用RGB颜色数值  
成功返回2个值，分别为最接近颜色的x坐标,y坐标,  
失败返回null

### soImageObject.findImage <a id="soImageObject.findImage" href="#soImageObject.findImage">&#x23;</a>
找图。  
注意这是找图,不能用来找文字,找验证码,  
也不是提供任何样本图像都能有完美的、百分百的成功率,  
查找的样本图像要尽可能的小,并尽可能裁剪去掉背景,突出查找特征

### soImageObject.findImage(屏幕图像,x坐标,y坐标,结束x坐标,结束y坐标,搜索步进) <a id="soImageObject.findImage" href="#soImageObject.findImage">&#x23;</a>
找图，除参数一以外，所有参数可选,  
成功返回相似度,匹配图像的右下角坐标  
└── 相似度为 0 到 100 之间的值，100 为完全相似,0 为完全不相似。

### soImageObject.findImageInWindow <a id="soImageObject.findImageInWindow" href="#soImageObject.findImageInWindow">&#x23;</a>
指定窗口找图  
注意这是找图,不能用来找文字,找验证码,  
也不是提供任何样本图像都能有完美的、百分百的成功率,  
查找的样本图像要尽可能的小,并尽可能裁剪去掉背景,突出查找特征

### soImageObject.findImageInWindow(窗口句柄,x坐标,y坐标,结束x坐标,结束y坐标,搜索步进) <a id="soImageObject.findImageInWindow" href="#soImageObject.findImageInWindow">&#x23;</a>
找图，所有参数可选,  
成功返回相似度,匹配图像的右下角坐标  
└── 相似度为 0 到 100 之间的值，100 为完全相似,0 为完全不相似

### soImageObject.flip() <a id="soImageObject.flip" href="#soImageObject.flip">&#x23;</a>
垂直翻转

### soImageObject.fromBitmap(位图句柄,色板句柄) <a id="soImageObject.fromBitmap" href="#soImageObject.fromBitmap">&#x23;</a>
自位图句柄创建图像,  
参数2可选

### soImageObject.fromClipBD() <a id="soImageObject.fromClipBD" href="#soImageObject.fromClipBD">&#x23;</a>
自剪板板获取图像

### soImageObject.fromIcon(图标句柄,是否透明图标) <a id="soImageObject.fromIcon" href="#soImageObject.fromIcon">&#x23;</a>
自图标句柄创建图像,  
参数@2为可选参数

### soImageObject.getBinString <a id="soImageObject.getBinString" href="#soImageObject.getBinString">&#x23;</a>
以 0 表示黑色像素，1 表示白色像素，返回一个包含所有像素的字符串。  
图像应为黑白图像，可调用 bpp 函数将图像转换为 1 位黑白图像，

### soImageObject.getBinString(width,height) <a id="soImageObject.getBinString" href="#soImageObject.getBinString">&#x23;</a>
返回一个包含所有像素的字符串，  
以 0 表示黑色像素，1 表示白色像素。  

可选用参数指定缩放大小，省略参数则不缩放。  
@width 指定宽度，@height 指定高度，宽高必须同时指定。

### soImageObject.getBits(行号) <a id="soImageObject.getBits" href="#soImageObject.getBits">&#x23;</a>
返回指定行图像数据,指定参数时返回值为buffer类型数组  
不指定参数时直接返回全部图像原始数据指针值

### soImageObject.getBytes("*.bmp") <a id="soImageObject.getBytes" href="#soImageObject.getBytes">&#x23;</a>
返回图像数据

### soImageObject.getData() <a id="soImageObject.getData" href="#soImageObject.getData">&#x23;</a>
返回图像行列数据  
返回值为buffer数组

### soImageObject.getDib() <a id="soImageObject.getDib" href="#soImageObject.getDib">&#x23;</a>
返回 DIB 指针

### soImageObject.getFrame() <a id="soImageObject.getFrame" href="#soImageObject.getFrame">&#x23;</a>
返回图像活动帧

### soImageObject.getFrameDelay() <a id="soImageObject.getFrameDelay" href="#soImageObject.getFrameDelay">&#x23;</a>
返回帧延时

### soImageObject.getHeight() <a id="soImageObject.getHeight" href="#soImageObject.getHeight">&#x23;</a>
获取高度

### soImageObject.getJpegQuality() <a id="soImageObject.getJpegQuality" href="#soImageObject.getJpegQuality">&#x23;</a>
返回JPGE图像质量

### soImageObject.getNumFrames() <a id="soImageObject.getNumFrames" href="#soImageObject.getNumFrames">&#x23;</a>
返回图像帧数目

### soImageObject.getPixel(x,y) <a id="soImageObject.getPixel" href="#soImageObject.getPixel">&#x23;</a>
返回指定坐标点 RGB 颜色数值。  
坐标参数为 0,0 返回第一个点的颜色。

### soImageObject.getPixelIndex(x,y) <a id="soImageObject.getPixelIndex" href="#soImageObject.getPixelIndex">&#x23;</a>
获取指定坐标颜色索引

### soImageObject.getTransColor() <a id="soImageObject.getTransColor" href="#soImageObject.getTransColor">&#x23;</a>
获取透明颜色

### soImageObject.getWidth() <a id="soImageObject.getWidth" href="#soImageObject.getWidth">&#x23;</a>
获取宽度

### soImageObject.grayScale() <a id="soImageObject.grayScale" href="#soImageObject.grayScale">&#x23;</a>
转换为灰度图

### soImageObject.init(宽,高,位宽,"*.bmp") <a id="soImageObject.init" href="#soImageObject.init">&#x23;</a>
所有参数可选

### soImageObject.isValid() <a id="soImageObject.isValid" href="#soImageObject.isValid">&#x23;</a>
图像是否有效

### soImageObject.load <a id="soImageObject.load" href="#soImageObject.load">&#x23;</a>
载入图像文件。

### soImageObject.load("路径") <a id="soImageObject.load" href="#soImageObject.load">&#x23;</a>
载入图像文件。

### soImageObject.loadUrl() <a id="soImageObject.loadUrl" href="#soImageObject.loadUrl">&#x23;</a>
自参数 @1 指定的网址加载图像，成功返回 true 。  
必须提前导入 inet.http 库才能使用此函数。

### soImageObject.median(2) <a id="soImageObject.median" href="#soImageObject.median">&#x23;</a>
中值滤波,参数指定半径

### soImageObject.mirror() <a id="soImageObject.mirror" href="#soImageObject.mirror">&#x23;</a>
左右翻转

### soImageObject.mix(混合图像,x坐标,y坐标,混合样式) <a id="soImageObject.mix" href="#soImageObject.mix">&#x23;</a>
除参数1以外，其他参数可选,  
混合样式请使用_MIX_前缀的常量

### soImageObject.negative() <a id="soImageObject.negative" href="#soImageObject.negative">&#x23;</a>
反相

### soImageObject.ocr <a id="soImageObject.ocr" href="#soImageObject.ocr">&#x23;</a>
基于种子连通算法的简单文本识别。  
这个函数的好处是不需要其他 OCR 组件，函数实现与用法都很简单。  
但仅限用于基于特定字库识别较规则的文本。  
无法识别的图像请改用其他 OCR 组件。  

soImage 扩展库范例中提供自动生成字库与 OCR 范例代码的工具。

### soImageObject.ocr(dict,length) <a id="soImageObject.ocr" href="#soImageObject.ocr">&#x23;</a>
参数 @dict 必须指定由 splitBinString 函数返回值生成的字库。  
可选用 @length 参数指定最大字符长度。

### soImageObject.paint(hdc,x坐标,y坐标,宽度,高度) <a id="soImageObject.paint" href="#soImageObject.paint">&#x23;</a>
在指定GDI设备句柄上绘图,所有参数可选

### soImageObject.repair(修复半径,修复次数) <a id="soImageObject.repair" href="#soImageObject.repair">&#x23;</a>
修复被破坏的图片

### soImageObject.resize(宽,高,插值方法) <a id="soImageObject.resize" href="#soImageObject.resize">&#x23;</a>
调整图像大小,  
可选用参数@3指定插值方法，可选值：  
0 双线性插值，较慢  
1 邻近插值，最快，效果差  
2 双立方法，效果最好  
默认使用双线性插值

### soImageObject.resize2((宽,高,插值方法,边缘方法,禁止平均法) <a id="soImageObject.resize2(" href="#soImageObject.resize2(">&#x23;</a>
调整图像大小  
可选用参数@2指定插值方法,可选值如下：  
1 NEIGHBOUR;2 BILINEAR;3 BSPLINE;4 BICUBIC;5 BICUBIC2;LANCZOS 6;  
7 BOX;8 HERMITE;9 HAMMING;10 SINC;11 BLACKMAN;12 BESSEL; 13 GAUSSIAN;  
14 QUADRATIC;15 MITCHELL;16 CATROM;17 HANNING;18 POWER;  
默认值为 BICUBIC2  

边缘取值可选方法如下：  
1 COLOR;2 BACKGROUND;3 TRANSPARENT;4 WRAP;5 REPEAT;6 MIRROR;  
默认值为 REPEAT  

可选指定参数@5为 true 以禁用平均法缩小图像

### soImageObject.rotateLeft() <a id="soImageObject.rotateLeft" href="#soImageObject.rotateLeft">&#x23;</a>
左旋

### soImageObject.rotateRight() <a id="soImageObject.rotateRight" href="#soImageObject.rotateRight">&#x23;</a>
右旋

### soImageObject.save <a id="soImageObject.save" href="#soImageObject.save">&#x23;</a>
保存图像文件。

### soImageObject.save("路径") <a id="soImageObject.save" href="#soImageObject.save">&#x23;</a>
保存图像文件。

### soImageObject.setBits(行号,数据) <a id="soImageObject.setBits" href="#soImageObject.setBits">&#x23;</a>
修改图像指定行数据

### soImageObject.setBytes(数据,"*.bmp") <a id="soImageObject.setBytes" href="#soImageObject.setBytes">&#x23;</a>
修改图像数据，成功返回 true。  
参数@1可以是字符串对象、buffer缓区、或普通指针  
如果参数@1为普通指针,则必须在参数@3中指定内存长度  
否则参数@3为可选参数（用于指定图像数据长度）。  
可选在参数 @2 中用文件后缀名指定图像格式，可省略。

### soImageObject.setDisposalMethod(disposalMethod) <a id="soImageObject.setDisposalMethod" href="#soImageObject.setDisposalMethod">&#x23;</a>
定义 GIF 图像的背景清除方法  
Potoshop 动画帧右键菜单里「处理」「不处理」其实就是这里说的背景清除方法,  
0、不定义清除方法  
1、不清除背景，下一帧的内容显示在当前帧的内容上面，  
2、恢复背景色，然后再显示下一帧的内容  
3、恢复上一帧，然后再显示下一帧的内容  

[可以看这里的动画演示了解这个属性的作用](http://www.theimage.com/animation/pages/disposal.html)

### soImageObject.setFrame() <a id="soImageObject.setFrame" href="#soImageObject.setFrame">&#x23;</a>
设置图像活动帧,起始索引为1,  
此函数并不影响当前加载的图像,  
而是在下次加载图像时起作用

### soImageObject.setFrameDelay(10) <a id="soImageObject.setFrameDelay" href="#soImageObject.setFrameDelay">&#x23;</a>
修改帧延时,以0.01秒为单位

### soImageObject.setJpegQuality(80) <a id="soImageObject.setJpegQuality" href="#soImageObject.setJpegQuality">&#x23;</a>
修改JPGE图像质量,参数为1到100之间

### soImageObject.setPixel(x,y,颜色) <a id="soImageObject.setPixel" href="#soImageObject.setPixel">&#x23;</a>
修改指定坐标点RGB颜色数值。  
坐标参数为 0,0 设置第一个点的颜色。

### soImageObject.setRetreiveAllFrames(flag) <a id="soImageObject.setRetreiveAllFrames" href="#soImageObject.setRetreiveAllFrames">&#x23;</a>
允许载入所有帧

### soImageObject.setTransColor(是否透明,透明颜色) <a id="soImageObject.setTransColor" href="#soImageObject.setTransColor">&#x23;</a>
修改透明颜色,参数@2使用RGB颜色数值  
GIF 应当改用 setTransIndex

### soImageObject.setTransIndex(index) <a id="soImageObject.setTransIndex" href="#soImageObject.setTransIndex">&#x23;</a>
设置透明索引

### soImageObject.split(行,列) <a id="soImageObject.split" href="#soImageObject.split">&#x23;</a>
按指定的行,列数目拆分并返回多个图像，  
返回值为数组

### soImageObject.splitAuto(杂点系列) <a id="soImageObject.splitAuto" href="#soImageObject.splitAuto">&#x23;</a>
自动拆分并返回多个图像。  
返回值为图像数组

### soImageObject.splitBinString <a id="soImageObject.splitBinString" href="#soImageObject.splitBinString">&#x23;</a>
图像转为黑白并返回包含所有像素的字符串，以 0 表示黑色像素，1 表示白色像素。

### soImageObject.splitBinString(length,width,height) <a id="soImageObject.splitBinString" href="#soImageObject.splitBinString">&#x23;</a>
用种子连通算法分割为多个图像。  
参数 @1 指定最大返回图像数目，可选用 @width,@height 参数指定图像缩放到指定大小。  
图像转为黑白并返回包含所有像素的字符串，以 0 表示黑色像素，1 表示白色像素。

### soImageObject.splitCmyk() <a id="soImageObject.splitCmyk" href="#soImageObject.splitCmyk">&#x23;</a>
拆分为CMYK四个图像

### soImageObject.splitHsl() <a id="soImageObject.splitHsl" href="#soImageObject.splitHsl">&#x23;</a>
拆分为HSL三个图像

### soImageObject.splitRgb() <a id="soImageObject.splitRgb" href="#soImageObject.splitRgb">&#x23;</a>
拆分为RGB三个图像

### soImageObject.splitSeed() <a id="soImageObject.splitSeed" href="#soImageObject.splitSeed">&#x23;</a>
使用种子连通算法分割为多个图像。  
参数指定最大返回图像数目，返回值为图像数组。

### soImageObject.splitXyz() <a id="soImageObject.splitXyz" href="#soImageObject.splitXyz">&#x23;</a>
拆分为XYZ三个图像

### soImageObject.splitYiq() <a id="soImageObject.splitYiq" href="#soImageObject.splitYiq">&#x23;</a>
拆分为YIQ三个图像

### soImageObject.splitYuv() <a id="soImageObject.splitYuv" href="#soImageObject.splitYuv">&#x23;</a>
拆分YUV三个图像

### soImageObject.toClipBD() <a id="soImageObject.toClipBD" href="#soImageObject.toClipBD">&#x23;</a>
图像复制到剪贴板

## soImageGifFileObject 成员列表 <a id="soImageGifFileObject" href="#soImageGifFileObject">&#x23;</a>

### soImageGifFileObject.close() <a id="soImageGifFileObject.close" href="#soImageGifFileObject.close">&#x23;</a>
写入GIF文件结束标记,并关闭文件

### soImageGifFileObject.count() <a id="soImageGifFileObject.count" href="#soImageGifFileObject.count">&#x23;</a>
获取当前已写入的图像帧数

### soImageGifFileObject.disposalMethod <a id="soImageGifFileObject.disposalMethod" href="#soImageGifFileObject.disposalMethod">&#x23;</a>
定义默认的背景清除方法  
Potoshop 动画帧右键菜单里「处理」「不处理」其实就是这里说的背景清除方法,  
0、不定义清除方法  
1、不清除背景，下一帧的内容显示在当前帧的内容上面，  
2、恢复背景色，然后再显示下一帧的内容  
3、恢复上一帧，然后再显示下一帧的内容  

[可以看这里的动画演示了解这个属性的作用](http://www.theimage.com/animation/pages/disposal.html)

### soImageGifFileObject.frameDelay <a id="soImageGifFileObject.frameDelay" href="#soImageGifFileObject.frameDelay">&#x23;</a>
默认每帧延时，以0.01秒为单位,默认为0.1秒

### soImageGifFileObject.transColor <a id="soImageGifFileObject.transColor" href="#soImageGifFileObject.transColor">&#x23;</a>
指定默认透明色  
如果为null表示不透明

### soImageGifFileObject.write(图像,保留局部调色板,本帧延时,保留局部处理方法) <a id="soImageGifFileObject.write" href="#soImageGifFileObject.write">&#x23;</a>
参数@1必须是 soImage 对象，  
此函数会自动检测图像，图像无效则不写入，  
其他参数为可选参数,不指定则使用默认值  
保留局部调色板增大体积但是图像颜色更丰富,  

如果图像位宽高于8位则会降至8位，  
建议事先调用 decreaseBpp 函数降低位宽可获得更好的输出效果。

### 自动完成常量
_MIX_ADD=7  
_MIX_AND=9  
_MIX_AVG=0xC  
_MIX_BLENDALPHA=4  
_MIX_DEFAULT=0  
_MIX_DSTCOPY=3  
_MIX_MASK=1  
_MIX_OR=0xB  
_MIX_SCREEN=6  
_MIX_SRCBLEND=5  
_MIX_SRCCOPY=2  
_MIX_SUB=8  
_MIX_XOR=0xA  
