4

我正在尝试创建一个Image/PngchartDirector

到目前为止,这是我在 VB 中的内容:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) 
    Handles Me.Load
    Dim mychart As XYChart = New XYChart(700, 170)
    Dim values As Double() = {25, 18, 15, 12, 8, 30, 35}
    Dim labels As String() = {"Labor", "Licenses", "Taxes", "Legal", "Insurance",
                              "Facilities", "Production"}
    mychart.setPlotArea(30, 20, 200, 200)
    mychart.addBarLayer(values)
    Response.ContentType = "image/png"
    Response.BinaryWrite(mychart.makeChart2(Chart.PNG))
    Response.Close()
End Sub

当我运行这个页面时,我得到这个输出:

我从下面的 asp 代码中得到了这个想法

   <%@ language="vbscript" %> 
   <% 
   Set cd = CreateObject("ChartDirector.API") 
   'The data for the bar chart 
   data = Array(85, 156, 179.5, 211, 123) 
   'The labels for the bar chart 
   labels = Array("Mon", "Tue", "Wed", "Thu", "Fri") 
   'First, create a XYChart of size 250 pixels x 250 pixels 
   Set c = cd.XYChart(250, 250) 
   'Set the plotarea rectangle to start at (30, 20) and of  
   322
   '200 pixels in width and 200 in height 
   Call c.setPlotArea(30, 20, 200, 200) 
   'Add a bar chart layer using the supplied data 
   Call c.addBarLayer(data) 
   'Set the x-axis labels using the supplied labels 
   Call c.xAxis().setLabels(labels) 
   'output the chart 
   Response.contenttype = "image/png" 
   Response.binarywrite c.makeChart2(cd.PNG) 
   Response.end 
   %> 

它使用img src链接到此页面来呈现图像

问题是我怎样才能做同样的实现aspx

请注意,我对刚开始的 .Net 了解不多。

4

2 回答 2

3

使用Response.End而不是Response.Close.

响应是缓冲的,所以如果你关闭它,浏览器不会得到缓冲区中的内容,除非你在关闭流之前刷新缓冲区。

于 2012-08-03T12:39:02.427 回答
3

在这种情况下,您可能想要使用自定义.ashxHttpHandler 而不是经典.aspx页面。这是使用这些的一个很好的介绍。

基本上,您将继承IHttpHandler定义ProcessRequest方法的接口。不幸的是,我只知道 C#。

public class CustomImageHandler : IHttpHandler
{
    public void ProcessRequest(HttpContext context)
    {
        // here you'll use context.Response to set the appropriate
        // content and http headers
        context.Response.StatusCode = (int)HttpStatusCode.OK;
        context.Response.ContentType = "image/png";
        byte[] responseImage = GenerateImage();
        context.Response.BinaryWrite(responseImage);
        context.Response.Flush();
    }
}
于 2012-08-03T12:30:59.263 回答