设为首页
加入收藏
帮助中心
首页 | 红盾通告 | 信息中心 | ASP技术 | 数据库 | 网页设计 | 网管专栏 | OICQ攻略 | 墨客频道 | 网站运营 |
当前位置:首页 >> ASP技术 >> ASP应用 >> 正文
最新信息
·asp无限级分类加js收缩伸展…
·ASP读取EXCEL数据
·ASP编程操作Excel
·ASP编写了一个EXCEL上传程…
·ASP如何读取EXCEL工作表名…
·ASPJpeg和ASPUpload组件的…
·用ASP和SQL语句动态的创建…
·asp生成excel报表
·四大 FCKeditor 实战应用技…
·FCKeditor 2.0 的设置.修改…
资料搜索
热点信息
·asp生成excel报表
·Javascript+ASP制作树形菜…
·AspUpload组件的UploadedF…
·ASPJpeg和ASPUpload组件的…
·FckEditor中文配置手册详细…
·ASPUpload组件介绍
·金光ASP柱形图程序
·asp生成不重复的随机数字
·ASP读取EXCEL数据
·0-29内取15个不同的随机数…
推荐信息
·用ASP生成二维饼图
·一个取图片尺寸的类,支持…
·随即文件名
·ASP 随机图片
·本地图片,音乐等ASP防盗代…
·ASPJpeg和ASPUpload组件的…
·如何实现网上考试?
·用ASP打开远端MDB文件的方…
·ASP编写完整的一个IP所在地…
·用ASP实现远程批量文件改名


Google
 
AspImage使用的例子
〖来源:豆腐技术站 | 编辑:Cloudy | 浏览:人次〗

aspImage是serverobjects站点上非常好的一个组件,它可以使我们利用Asp实现很多对于图形的处理功能。
比如,豆腐在最近的项目中就需要对 费用进行统计,要画 柱图,饼图,等等,都需要用到这个组件。
这个组件本身没有内置柱图的功能,我们需要自己做这样的函数,还是老规矩,我们先来看看代码吧。
Function DrawPillar(arrNum)
'这个函数的功能是 生成 一个 柱图
'**************以下是变量定义********************
dim arrColor(13)
dim arrNum1()
dim i
dim intX
dim intY
'--------------以下是代码开始--------------------
i=0
arrColor(i)=RGB(255,255,255)
i=i+1
arrColor(i)=RGB(255,255,0)
i=i+1
arrColor(i)=RGB(255,0,255)
i=i+1
arrColor(i)=RGB(0,255,255)
i=i+1
arrColor(i)=RGB(255,0,0)
i=i+1
arrColor(i)=RGB(0,255,0)
i=i+1
arrColor(i)=RGB(0,0,255)
i=i+1
arrColor(i)=RGB(255,255,255)
i=i+1
arrColor(i)=RGB(255,255,0)
i=i+1
arrColor(i)=RGB(255,0,255)
i=i+1
arrColor(i)=RGB(0,255,255)
i=i+1
arrColor(i)=RGB(255,0,0)
i=i+1
arrColor(i)=RGB(0,255,0)
i=i+1
arrColor(i)=RGB(0,0,255)
i=i+1

intMax=GetMaxY(arrNum)

Set Image = Server.CreateObject("AspImage.Image")
Image.MaxX=620
Image.MaxY=300

intRatio=(Image.MaxY-40)/intMax

Image.GradientTwoWay rgb(41,137,204),vbWhite ,0,1


'Image.BackgroundColor =vbBlue
'Image.FrameRect 15,15,Image.MaxX -15,Image.MaxY -15

'Y 轴
Image.X =40+2
Image.Y =15
Image.LineTo 40+2,Image.MaxY-20
Image.TextOut "↑",40-5,14,false
Image.TextOut "单位:元",15,0,false
for i=1 to 10
Image.TextOut "-" ,40,((Image.MaxY-40)/10)*i,false
'Image.TextOut cDBL((intMax/10))*(i),0,((Image.MaxY-40)/10)*(11-i),false
next

'X轴
Image.X =Image.MaxX-15
Image.Y =Image.MaxY-20
Image.LineTo 40,Image.MaxY-20

Image.TextOut ">",Image.MaxX-15-4 ,Image.MaxY-20-9,false
for i=1 to 12
Image.TextOut i & "月" ,40+ i * (30+15) -20 ,Image.MaxY-20,false
next

if intMax=0 then
intMax=1
end if

'一年有12个月,产生 12个 颜色
intX=40

for i=0 to 11
Image.BackgroundColor = arrColor(i)
Image.Rectangle intX+20,Image.MaxY -20 , intX+50, Image.MaxY -20 - arrNum(i)*intRatio
Image.TextOut arrNum(i),intX+20, Image.MaxY -32 - arrNum(i)*intRatio , false
intX=intX+ 30 +15
next
Image.FileName=server.MapPath("test.jpg")
Image.SaveImage

set Image=nothing
Response.Write "<img src=test.jpg>"
End Function

function GetMaxY(arrNum)
'这个函数的功能是 得到数组中最大 的数字
'***************以下是变量定义************
dim i
dim intMax '寄存器
'---------------以下是代码开始------------
intMax=0
for i=0 to UBOUND(arrNum)
if cDbl(intMax)< cDBL(arrNum(i)) then
intMax=arrNum(i)
end if
Next

GetMaxY=intMax
End Function

我们通过代码Set Image = Server.CreateObject("AspImage.Image")得到一个AspImage的实例,现在
我们就可以利用AspImage提供给我们的动人功能了。
Image.MaxX=620
Image.MaxY=300
我们可以设定我们需要画的图形的区域。
Image.GradientTwoWay rgb(41,137,204),vbWhite ,0,1
这是一个非常非常好的方法,我们可以给这个图片的背静添加一个渐进填充的颜色。

'Y 轴
Image.X =40+2
Image.Y =15
Image.LineTo 40+2,Image.MaxY-20
Image.TextOut "↑",40-5,14,false
Image.TextOut "单位:元",15,0,false
for i=1 to 10
Image.TextOut "-" ,40,((Image.MaxY-40)/10)*i,false
next

这段代码是一个画 Y 轴的代码,不要小看这个"↑",豆腐花了很长的时间才搞定的。:)
'X轴
Image.X =Image.MaxX-15
Image.Y =Image.MaxY-20
Image.LineTo 40,Image.MaxY-20

Image.TextOut ">",Image.MaxX-15-4 ,Image.MaxY-20-9,false
X轴相对来说就简单多了。

'一年有12个月,产生 12个 颜色
intX=40

for i=0 to 11
Image.BackgroundColor = arrColor(i)
Image.Rectangle intX+20,Image.MaxY -20 , intX+50, Image.MaxY -20 - arrNum(i)*intRatio
Image.TextOut arrNum(i),intX+20, Image.MaxY -32 - arrNum(i)*intRatio , false
intX=intX+ 30 +15
next
这端代码是最终生成柱图的代码,具体我就不解释了。


 

 

之二:

前面我们讲了如何利用AspImage来制作柱图,柱图还好办,起码有关于长方形的函数,我们可以来
借用,但是如果是,饼图怎么办?
有的朋友不是说了,AspImage上不是有Pie的函数吗?是呀,它是有,但是它的那个也太难用了。
豆腐没有办法,经过同事的帮助,利用我们高中学习的三角形公式(三角形公式?有没有搞错?)
终于做出了这样的函数,而且使用起来非常的方便。大家请看
Function DrawPie(ArrNum,arrText)
'函数功能:根据指定的 数值和显示,他们均是 数组
'**********以下是变量定义**************************
dim intTotal '当前
dim i
dim intSettledAngle
dim arrColor(6)
'----------以下是代码开始--------------------------
'设置颜色
i=0
arrColor(i)=RGB(255,255,255)
i=i+1
arrColor(i)=RGB(255,255,0)
i=i+1
arrColor(i)=RGB(255,0,255)
i=i+1
arrColor(i)=RGB(0,255,255)
i=i+1
arrColor(i)=RGB(255,0,0)
i=i+1
arrColor(i)=RGB(0,255,0)
i=i+1
arrColor(i)=RGB(0,0,255)
i=i+1
'以下开始 对数据进行处理
'首先得到 数量的总数

intTotal=0
for i=0 to UBOUND(ArrNum)
intTotal=intTotal + ArrNum(i)
Next

Set Image = Server.CreateObject("AspImage.Image")

'设定 图象的 区域大小
Image.MaxX=300
Image.MaxY=300
'生成渐进色
Image.GradientTwoWay rgb(41,137,204),vbWhite ,0,1

'处理角度
intSettledAngle=0
intRectStart=0
for i=0 to ubound(ArrNum)
intAngle=(arrNum(i)/intTotal)*360
'一个一个的画 扇区,最终合成一个完整的 圆
set Image=DrawSinglePie(Image, 360-intSettledAngle,arrColor(i))

'在图象的最下方 对图象内容进行描述
Image.BackgroundColor =arrColor(i)
Image.Rectangle intRectStart+10*(i+1),250,intRectStart+10*(i+1)+10,260
Image.TextOut arrText(i), intRectStart+10*(i+1)+10,245,false

'在图象的最下方 对图象内容进行描述
Image.BackgroundColor =arrColor(i)
Image.Rectangle intRectStart+10*(i+1),270,intRectStart+10*(i+1)+10,280
Image.TextOut cstr(intAngle) & "%", intRectStart+10*(i+1)+10, 265,false
intRectStart=intRectStart+50
intSettledAngle=intSettledAngle + intAngle
next
Image.FileName=server.MapPath("test.jpg")
Image.SaveImage
set Image=nothing
Response.Write "<img src=test.jpg>"
End Function

function DrawSinglePie(Image,intAngle,intColor)
'函数功能: 根据指定的 角度和颜色 画一个矩形
'**************以下是变量定义********************
const pi=3.1415926 '圆周率
dim pii '经过180角转换后的圆周,弧度
dim x1,x2,x3,x4 '4个X坐标
dim y1,y2,y3,y4 '4个Y坐标
dim intR '圆的半径,这个半径不是真正的圆的半径,但是可以用来固定圆心的位置
'--------------以下是代码开始--------------------
'**********************************
'*
'*(x1,y1),(x2,y2) 和 圆心必须在 通过(0,0) 的 斜角45 的直线上
'***********************************
pii=pi/180
if intAngle > 360 then
intAngle=intAngle-360
end if
x1=10
y2=10
x2=250
y2=250

intR=(x1+x2)/2
'************************************
'*
'*以下利用 三角形 公式 得到相应 Point 的坐标
'************************************
if intAngle<135 then
'角度不足 135
angle=intAngle*pii
x3=tan(angle-45*pii)*intR+intR '
y3=0
x4=0
y4=0
elseif intAngle=135 then
x3=(intR)*2
y3=intR
x4=0
y4=0
elseif intAngle<315 then
angle=intAngle*pii
intTemp=(intR/tan(angle-135*pii))-intR
x3=250+intTemp
y3=250
x4=0
y4=0
elseif intAngle=315 then
x3=(-intR)*2
y3=intR
x4=0
y4=0
else
angle=intAngle*pii
x3=tan(angle-45*pii)*intR+intR
y3=0
x4=0
y4=0
end if

Image.BackgroundColor =intColor
Image.Pie x1,y1,x2,y2,x3,y3,x4,y4

'Image.TextOut 360-intAngle,(125+x3)/2+20,(125+y3)/2+20,false
'Image.TextOut intRatio ,intPosX,intPosY,false

set DrawSinglePie=Image
end function

最后我们在利用 drawPie 中传递要显示的数据的数组就可以了


录入时间:2006-11-06 08:42:06 [打印本页] [关闭窗口] [返回顶部]
特别声明: 本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。

Copyright © 2006-2014 0733168.Com Inc All Rights Reserved
关于我们 | 广告合作 | 联系我们 | 法律声明 | 友情链接 | 意见反馈
本站所收录信息、社区话题、及本站所做之广告均属其个人行为,与本站立场无关
湘ICP备06008436号