本帖最后由 myzam 于 2011-4-8 19:43 编辑
shotgraph图像组件的语法
终于把方法处理完了。现在贴出来,共享。myzam 2011-4-2
提醒:要完整的使用这里的方法,请创建画布。obj.fillrect 。。。。
没有画布的图片,背景是一个黑粑粑。而且下面的关于透明的属性,将不起作用。
参数是标准的vbs命名方法。如字符串就是s开头,布尔值就是b开头etc。下面的方法我将抽时间逐以注解。
shotgraph是以矩形为基础进行构图的。确定矩形大小的方法有两种:
通常是用对角线端点坐标确定大小,但是有的地方是用对角线的左上端点和,长,宽来确定大小的。
---方法部分----------------------
动画:
1--定义帧
TrackAdd iTransp,iXDecl,iYDecl,iX,iY,iWidth,iHeight,iTime [,sDisp]
说明:oimg.trackadd true,0,0,10,10,50,40
就是创建一帧,该帧的长方形对角线坐标为:0,0,0+50,0+40
然后在帧上放一个元件,元件所在的长方形的lefttop坐标为10,10,当然这个元件的最大范围是10,10,10+50,10+40
也就是说元件超出帧后将不显示超出的部分。true逻辑值,到表要背景色,false就表示不要背景色。shotgraph的逻辑值
比较松散,非零的数等价于true,零等价于false。这点和vbs不同。在vbs中true总是严格的=-1,false=0.
最后一个参数,sdisp是可选的,用处不大,约去。
2--保存动画TrackPlay sFileName [,iBgColor]
说明:把你做的动画存盘。sfilename就是路径。如 oimg.trackplay "f:\test.gif"
如果你用gifimge,jepgimage存盘,则动画将不动。
3--椭圆弧arc
Arc nLeftRect, nTopRect, nRightRect, nBottomRect, nXStartArc, nYStartArc, nXEndArc, nYEndArc
说明:arc画的是椭圆弧(含圆弧),参数nleftrect,ntoprect,nright,nbottomrect确定矩形的内切椭圆,
nXStartArc, nYStartArc, 从椭圆中心到这个点的一条射线。
nXEndArc, nYEndArc 从椭圆中心到这个点的一条射线。上面的两射线就从椭圆上割下了椭圆弧。
例子:未注册版为200x200的jpg,320x240的gif
set s=createobject("wscript.shell")
set obj=CreateObject("shotgraph.image")
x=320:y=240
obj.createimage x,y,8
obj.setcolor 0,255,200,225
obj.setcolor 1,0,255,0
obj.setcolor 2,0,0,255
obj.setbgcolor 0
obj.fillrect 0,0,x-1,x-1
obj.setbgcolor 1
obj.chord 10,10,50,50,30,50,30,10
obj.jpegimage 90,0,"test.jpg"
s.run "test.jpg"
4--椭圆弓形区域chord /发音kuod/这个单词大家比较生僻,意思是弦,弓形
Chord nLeftRect, nTopRect, nRighrRect, nBottomRect, nXRadial1, nYRadial1, nXRadial2, nYRadial2
说明:参数含义完全同上面,只是这里得到的是弓形区域。
例子:
set s=createobject("wscript.shell")
set obj=CreateObject("shotgraph.image")
x=320:y=240
obj.createimage x,y,8
obj.setcolor 0,255,200,225
obj.setcolor 1,0,255,0
obj.setcolor 2,0,0,255
obj.setbgcolor 0
obj.fillrect 0,0,x-1,x-1
obj.setbgcolor 1
obj.chord 10,10,50,50,30,50,30,10
obj.jpegimage 90,0,"test.jpg"
s.run "test.jpg"
5---createbrush
CreateBrush sStyle, nColor, sHatch
说明:单词hatch---是光栅之意,或者说是影线,就是说填充的是一根根线。
EG.1
set s=createobject("wscript.shell")
set obj=CreateObject("shotgraph.image")
x=320:y=240
obj.createimage x,y,8
obj.setcolor 0,255,200,225
obj.setcolor 1,0,255,0
obj.setcolor 2,0,0,255
obj.setbgcolor 0
obj.fillrect 0,0,x-1,x-1
obj.createbrush "",1,""
obj.chord 10,10,50,50,30,50,30,10
obj.jpegimage 90,0,"test.jpg"
s.run "test.jpg"
EG.2
set s=createobject("wscript.shell")
set obj=CreateObject("shotgraph.image")
x=320:y=240
obj.createimage x,y,8
obj.setcolor 0,255,200,225
obj.setcolor 1,0,255,0
obj.setcolor 2,0,0,255
obj.setbgcolor 0
obj.fillrect 0,0,x-1,x-1
obj.createbrush "BS_HATCHED",1,"HS_VERCITCAL"
obj.chord 10,10,50,50,30,50,30,10
obj.jpegimage 90,0,"test.jpg"
s.run "test.jpg"
6---创建图像CreateImage nXSize, nYSize, nColors
说明:参数nXSize, nYSize设置图片的大小。参数 nColors 设置图片的背景色。
7----创建字体
CreateFont sFamily, nCharset, nHeight, nAngle, bBold, bItalic, bUnderline, bStrikeOut
[,bUnicode]
说明:sFamily 设置字体如Euclid,Rrial,对不支持中文字体。 nCharset指定字符集。nAngle旋转角度,取90*40才旋转一周。
bBold, bItalic, bUnderline, bStrikeO一次表示黑体否?斜体否?下划线否?删除线否?它们去逻辑值。
eg.1
set s=createobject("wscript.shell")
set obj=CreateObject("shotgraph.image")
x=320:y=240
obj.createimage x,y,8
obj.setcolor 0,255,200,225
obj.setcolor 1,0,255,0
obj.setcolor 2,0,0,255
obj.setbgcolor 0
obj.fillrect 0,0,x-1,x-1
obj.settextcolor 1
obj.createfont "arial",0,48,30,true,false,false,false
obj.textout 10,10,"hello world"
obj.gifimage 90,0,"test.gif"
s.run "test.gif"
8------创建笔CreatePen sStyle, nWidth, nColor
说明:sstyle笔的样式如:PS_SOLID(P-PEN,S-STYLE之意),PS_DASH,PS_DOTDASH
nWidth笔的粗细, nColor笔的颜色。
如:
obj.createpen "PS_SOLID",4,1
9---文字布局TextOut nXStart,nYStart,sText[,bUnicode]
说明: nXStart,nYStart设置文字在图片上显示的矩形的left top坐标。
sText设置要显示的文字字符串
10---画线Line nXStart, nYStart, nXEnd, nYEnd [,bAntiAliased]
说明:nXStart, nYStart, nXEnd, nYEnd 线的起点和终点坐标。
-11-画饼Pie nLeftRect, nTopRect, nRighrRect, nBottomRect, nXRadial1, nYRadial1, nXRadial2, nYRadial2
说明:nLeftRect, nTopRect, nRighrRect, nBottomRect确定一个矩形框,框中放置了一个内切椭圆。假定椭圆的中心是P点。
nXRadial1, nYRadial1确定一个点Q,然后PQ就确定了一条线。同样的道理 nXRadial2, nYRadial2 也和椭圆的中心P确定
另一条线RQ.这样弓形就构造出来了。
-12-贝塞尔曲线
PolyBezier aPoints
说明:apoints为数组定义的4个点,2个端点,2个控制点
如:apoints=arrary(0,0,10,30,24,50,100,50)
也可以是2维数组
bezier函数是数学上著名的多项式插值函数。
13---折线
PolyLine sFill, aPoints
说明:sfill取ALTERNATE(交替填色,如果有的话) ,WINDING
通常可以空缺,如oimg.polyline " ",arrary(0,0,10,30,24,50,100,50),
aPoints必须是由array生成的数组。这一点同上。
-14--矩形
Rectangle nXStart, nYStart, nXEnd, nYEnd
说明:nXStart, nYStart, nXEnd, nYEnd代表矩形的对角线坐标。
obj.rectangle 10,10,50,30
15--圆角矩形ROUNDrECT nXStart, nYStart, nXEnd, nYEnd, nWidth, nHeight
说明:nXStart, nYStart, nXEnd, nYEnd代表矩形的对角线坐标。
nWidth, nHeight 圆角是放到一个小矩形中的,代表这个小矩形的宽,高。
obj.roundrect 10,10,100,80,20,20
16--设置填充色
SetBgColor nColor
说明:ncolor表示由setcolor定义的色编号。
17---设置背景色
SetBkColor nColor
说明:ncolor表示由setcolor定义的色编号。
要更详细的设置背景就用createbrush方法。
18---设置背景模式为透明或不透明SetBkMode sMode
smode=OPAQUE 或TRANSPARENT
说明:在创建动画时,和设置光栅时其作用是明显的。
19---设置颜色
SetColor nColor, nRed, nGreen, nBlue
说明:ncolor给这个自定义颜色的编号,以便其它方法引用这个颜色。
nRed, nGreen, nBlue RGB颜色数,可以是16进制。
20--设置画笔颜色
SetDrawColor nColor
说明:ncolor表示由setcolor定义的色编号。
要想更详细的设置画笔,就用CREATEPEN方法。
21--设置文本颜色
SetTextColor nColor
说明:ncolor表示由setcolor定义的色编号。
22--创建gif图片
GifImage nTransparent, nInterlaced, sFileName
说明:nTransparent 如果取true表示要背景色,否则不要背景色。如果无效那对光栅就有效。
nInterlaced 消除内部据此,取0,1,2
23--创建jpg图片
JpegImage iCompression, iProgressive, sFileName [,nXStart] [,nYStart] [,Width] [,Height]
说明:icompresion一般去-1等价于去压缩率100,取-1的效果与去90的压缩率差不多。取1是很差的效果。
如:obj.jpegimage -1,0,"text.jpg"
iProgressive是否逐行扫描,设置为0即false好了。
sFileName存盘路径。
[,nXStart] [,nYStart] [,Width] [,Height]可选,存盘时改变图片的尺寸。
gifimage方法存盘时是不可以改变图片的尺寸的。
24---获取磁盘上的图片文件的维数(dimension),就是图片大小。如400x300
GetFileDimensions sFileName,iX,iY
说明:sFileName磁盘上图片的路径
iX,iY 磁盘文件的尺寸。这个方法要和readiamg配合作用才大,但是用readimage要钱。
如:obj.getfiledimensions "test.jpg",x,y
这里的x,y被读入内存,然后通过creatimage方法调用。
如:obj.createimage x,y,8
25---截屏
CaptureScreen nXDest, nYDest, nWidth, nHeight, nXSrc, nYSrc
说明:
nXDest, nYDest, nWidth, nHeight确定要创建的图片的大小,nWidth, nHeight这与通常意义下的
矩形框的确定方法不同。因为它们代表的是宽高。
nXSrc, nYSrc 表示屏幕的一个点,由这个点到屏幕的左下角就是你的切屏范围。由于没有负费切的图片不大。
dest=distination,src=source
如:obj.capturescreen 10,10,50,50,0,0
10,10,50,50是你要保存的图片的对角线的坐标。
0,0是屏幕的coordinate of left-top point
26---补充创建gif动画
创建gif动画有2个方法是必须要用到的trackadd,trackplay
trackadd是用来定义动画区域的,而trackplay是用来存盘的。
动画的size由于没purchase money。So,你就只可以使用320x240的size了。你觉得不过瘾
那就pay dollar 80吧。对了最关键的一点是动画的frame怎么来?对了,用前面的划线啊,
画矩形啊,话椭圆啊,画贝塞尔曲线啊这些方法去创建frame吧。那是你自己的创意了,与我
无关了。
TrackAdd iTransp,iXDecl,iYDecl,iX,iY,iWidth,iHeight,iTime [,sDisp]
itransp: 透明否?
ixdec1,iydec1配合iWidth,iHeight定义动画演示区域,就是帧。基于图片的letf-top开始计算。
iX,iY上面定义的动画区域即帧,元件的位置就是ix,iy。这里的计算是基于动画区域
开始计算的。
itime:显示表示动画时间。
sdisp=dispose处理之意。处理谁?不是frame才怪。怎么处理?
也就是说sdisp有3个取值:"LEAVE","BACKGROUND","PREVIOUS",动画有什么拖尾动画,丢掉动画,就
是这些意思。
trackplay太明了,没说的。
来过例子:
obj.rectangle 10,30,50,50
obj.trackadd true,10,10,20,20,80,80,30
这就定义了一动画区域10,10,10+80,10+80
在这个区域内,第一帧的位置是10-20,30-20,注意这不是图片的坐标!是动画区域内的坐标
或叫相对坐标吧。如果让你来设计这个shotgraph我想你也会自然的用相对坐标。为了计算的方便,最后是是把trackadd里面的元件坐标和
rectangle里面的元件坐标设置成一样,或干脆在trackadd里面把元件的坐标设置成0,0.
这里的动画的逐帧动画,创建动画的过程。创建帧,在帧上在放元件,超出帧的部分将不显示。元件要放在帧上。注意次序。
有点遗憾,就是图片有点小,还有textout只支持2个汉字。
27---剪辑版方法
这里的图像剪辑版和windows剪辑版是完全不同的两个无关概念。它指的是内存里面开辟的一个缓冲区。
要使用剪辑版,首先要创建图片,就是要在语句
oimg.createimage xsize,yszie,ncolor 之后才可以使用!
(a)oimg.initclipboard width,height
说明:初始化剪辑版,即在内存里面创建一个宽为width,高为height的长方形区域。
(b)oimg.selectclipboard true
说明:激活剪辑版,剪辑版必须激活才可以使用。
(c)oimg.copy x,y,w,h,cx,cy "SRCCOPY"
说明:从剪辑版中复制图片。cx,cy是剪辑版的左上顶点坐标。复制的图片就从这里开始直到剪辑版的右下角。
把复制的图片粘贴到图片的矩形框上,其左上顶点为x,y,右下顶点为x+w,y+h
(d)实例:- set s=createobject("wscript.shell")
- set oimg=CreateObject("shotgraph.image")
-
- xsize=320:ysize=240
- oimg.createimage xsize,ysize,8
- oimg.setcolor 0,200,80,100
- oimg.setcolor 1,0,255,0
- oimg.setcolor 2,0,0,255
-
- oimg.setbgcolor 0
- oimg.fillrect 0,0,xsize,ysize
-
-
- oimg.initclipboard 50,50
- oimg.selectclipboard true
- oimg.setbgcolor 1
- oimg.rectangle 0,0,100,100
- oimg.copy 0,20,30,30,10,10,"SRCCOPY"
- oimg.copy 0,60,30,30,10,10,"SRCCOPY"
- oimg.copy 10,100,30,30,10,10,"SRCCOPY"
- oimg.gifimage -1,0,"hh.gif"
- s.run "hh.gif"
复制代码 28---数据传送
可以把图片当数组数据进行传送。
(a) 读入图片数据
data=oimg.readbinaryfile("test.gif",maxsize)
其中maxsize是预先自己设定的图片的最大尺寸,超出这个尺寸的数据将被丢掉。单位为字节byte。
如可以设置maxsize=1024*10
(b)写数据即数据存盘
oimg.writebinary data,0,ubound(data)+1,"hhh.gif"
说明:如果报错请把maxsize设置成一个更大的数。
0,ubound(data)+1表示数组的维数的最小值是0,最大值是按vb函数ubound计算出来的。
什么样的图片都可以进行数据的传送,当然也可以进行图片格式的转变。
如果报错,请把maxsize设置成更大的数。一般来讲如果是800x600,则maxsize=480000
其它情况类似。
(d)例子:- set s=createobject("wscript.shell")
- set oimg=CreateObject("shotgraph.image")
- maxsize=480000
- data=oimg.readbinaryfile("sunset.jpg",maxsize)
- oimg.writebinary data,0,ubound(data)+1,"hhh.jpg"
- s.run "hhh.jpg"
复制代码 GOOD LUCK! |