<%@ LANGUAGE = JScript%> <% // JavaScript Scripting Example 07 // // "The Pie" // // Dimac 2002-03-14 (www.dimac.net) // Don't cache the image Response.Cachecontrol = "No-cache"; Response.Expires = -1440; Response.AddHeader("pragma", "no-cache"); var errormsg = new String(""); errormsg = DrawPie(); // Check if errors occured if (errormsg != "") DisplayError(errormsg); // Draw the clock function DrawPie() { try { // Fix path var path = Server.MapPath("..\\..\\images") + "\\"; // Create image objects var imageobj = Server.CreateObject("w3Image.Image"); imageobj.CreateEmptySurface(200,200); var imageinfo = Server.CreateObject("w3Image.Image"); imageinfo.CreateEmptySurface(200,200); var colorobj = imageobj.CreateColorRGB(254, 254, 254); var penobj = imageobj.CreatePen("solid",2,colorobj); imageobj.SetPen(penobj); var fontobj = imageobj.CreateFont("Tahoma",16,0,"normal",0,0x303030,false,false,true); imageinfo.SetFont(fontobj); var penobj2 = imageobj.CreatePen("solid", 1, 0x303030); imageinfo.SetPen(penobj2); imageobj.DrawEllipse(0,0, imageobj.Width, imageobj.Height); // Create server side objects var conn = Server.CreateObject("ADODB.Connection"); var rs = Server.CreateObject("ADODB.RecordSet"); var totalusers = 0; var counter = 0; var color = new String(""); var users; var name; var sum = 0; var red, green, blue; var delta_x, delta_y; var tempx = imageobj.Width; var tempy = imageobj.Height/2; // Open connection to db // // Change this connection string to suit your own database!!! // conn.Open("PROVIDER=SQLOLEDB;DATA SOURCE=W3imagedb;UID=myid;PWD=mypass;DATABASE=W3image"); rs.Filter = ""; // Get total number of users from the database var sql = "SELECT SUM(Users) AS Expression FROM Activity" // Get recordset rs.Open(sql, conn, 1, 2); if (rs) { totalusers = parseInt(rs.Fields.Item("Expression")); rs.Close(); } // Get each individual part of the pie... var sql = "SELECT * FROM Activity"; // Get recordset rs.Open(sql, conn, 1, 2); while (!rs.EOF) { // Get nbr of users users = parseInt(rs.Fields.Item("Users")); // Get name of the activity name = rs.Fields.Item("description") + "\n"; // Get the intensity values red = parseInt(rs.Fields.Item("Red")); green = parseInt(rs.Fields.Item("Green")); blue = parseInt(rs.Fields.Item("Blue")); rs.MoveNext(); // Draw start line if (counter == 0) { imageobj.DrawLine((imageobj.Width/2), (imageobj.Height/2), imageobj.Width, (imageobj.Height/2)); } // Calculate new line sum += users; var percent = 360 * (sum/totalusers); var radian = (percent * Math.PI / 180); delta_x = ((imageobj.Width/2) + parseInt(Math.cos(radian) * imageobj.Width/2)); delta_y = ((imageobj.Height/2) + parseInt(Math.sin(radian) * imageobj.Width/2)); if (!rs.EOF) imageobj.DrawLine((imageobj.Width/2), (imageobj.Height/2), delta_x, delta_y); // Fill area with the brush color var colorbrush = imageobj.CreateColorRGB(red, green, blue); var brushobj = imageobj.CreateSolidBrush(colorbrush); imageobj.SetBrush(brushobj); var fillx = tempx - ((tempx - delta_x)/2); var filly = tempy - ((tempy - delta_y)/2); imageobj.FloodFill(fillx,filly, colorobj); tempx = delta_x; tempy = delta_y; // Make info imageinfo.SetBrush(brushobj); imageinfo.DrawRect(30, 20 + (counter * 20), 50, 35 + (counter * 20)); var value = parseInt(((users/totalusers) * 100) + 0.5); imageinfo.DrawText(value + "% - " + name, 60, 20 + (counter * 20)); counter++; } // Close recordset rs.Close(); // Close connection conn.Close(); // Load background var imageobj2 = Server.CreateObject("w3Image.Image"); if (imageobj2.LoadImage(path + "dimac.jpg") == false) { // Do your error handling here... return "Error when loading the image! Path " + path + "dimac.jpg is invalid" ; } // Alpha blend data imageobj.StretchBltExt(imageobj2, 0, 0, imageobj.Width, imageobj.Height, 0, 0, imageobj.Width, imageobj.Height, "alpha", 220); imageinfo.StretchBltExt(imageobj2, imageobj.Width, 0, imageobj.Width, imageobj.Height, 0, 0, imageobj.Width, imageobj.Height, "alpha", 220); // Stream imageobj as a JPG image. if (imageobj2.StreamImage(Response, "JPG", 24) == false) { // Do your error handling here... return "Error when streaming image!"; } // Sucess return ""; } catch(err) { // Do your error handling here... return "Error: " + (err.number & 0xFFFF) + " - " + err.description + "."; } } // Example of a error handler - Displaying the error as a image function DisplayError(msgcode) { // Create an error image var errorimage = Server.CreateObject("W3Image.Image"); errorimage.CreateEmptySurface(1,1); // Create and select the font var fontobj = errorimage.CreateFont("Tahoma",24,0,"normal",0,0x000000,false,false,true); errorimage.SetFont(fontobj); // Get size of the text var width = errorimage.GetTextWidth(msgcode); var height = errorimage.GetTextHeight(msgcode); // Create a surface as large as the error message errorimage.CreateEmptySurface(width,height); // Select the font again (font is deselected when creating a new surface) errorimage.SetFont(fontobj); // Write out error message errorimage.DrawText(msgcode,0,0); // Stream the image as a JPG image errorimage.StreamImage(Response, "JPG", 24); } %>