快精灵印艺坊 您身边的文印专家
广州名片 深圳名片 会员卡 贵宾卡 印刷 设计教程
产品展示 在线订购 会员中心 产品模板 设计指南 在线编辑
 首页 名片设计   CorelDRAW   Illustrator   AuotoCAD   Painter   其他软件   Photoshop   Fireworks   Flash  

 » 彩色名片
 » PVC卡
 » 彩色磁性卡
 » 彩页/画册
 » 个性印务
 » 彩色不干胶
 » 明信片
   » 明信片
   » 彩色书签
   » 门挂
 » 其他产品与服务
   » 创业锦囊
   » 办公用品
     » 信封、信纸
     » 便签纸、斜面纸砖
     » 无碳复印纸
   » 海报
   » 大篇幅印刷
     » KT板
     » 海报
     » 横幅

使用ASPIMAGE制作图形(二)

前面我们讲了如何利用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 中传递要显示的数据的数组就可以了。
返回类别: 教程
上一教程: 在ASP中取得服务器网卡的MAC地址、DNS地址等网络信息
下一教程: 文章系统中“上篇、下篇”效果的制作

您可以阅读与"使用ASPIMAGE制作图形(二)"相关的教程:
· 使用ASPIMAGE制作图形(一)
· 使用纯粹的asp+语言制作的栏目治理(三)
· 用ASPJPEG组件制作图片的缩略图和加水印
· 如何使用ASP制作类似安装向导的页面
· 使用XMLHTTP制作域名查询系统
    微笑服务 优质保证 索取样品