/* 豆腐制作,都是精品 http://www.asp888.net 豆腐技術站 如轉載,請保留完整版權信息 */
很久沒有給大家帶來新的文章了,最近豆腐忙于公司的業務,怠慢了各位朋友,在這里給大家先說一聲 對不起了,沒有辦法,豆腐也要生活呀。 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("http://www.okasp.com/techinfo/test.jpg") Image.SaveImage
set Image=nothing Response.Write "<img src=http://www.okasp.com/techinfo/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 這端代碼是最終生成柱圖的代碼,具體我就不解釋了。
|