Mathematica Graphics output in an ASP.NET WebApplication
- To: mathgroup at smc.vnet.net
- Subject: [mg53459] Mathematica Graphics output in an ASP.NET WebApplication
- From: "Javier Chicote" <goraperas at hotmail.com>
- Date: Wed, 12 Jan 2005 03:41:40 -0500 (EST)
- Sender: owner-wri-mathgroup at wolfram.com
Hi,
I would like to place the Mathematica Graphics output in an ASP.NET
WebApplication using Wolfram.NETLink reference.
I tried to use the mathKernel.Graphics property to get the image from the
Mathematica graphics output during the last call to mathKernel.Compute. The
problem is that I need to refer a URL for my
System.Web.UI.WebControls.Image, and the mathKernel.Graphics property
returns a System.Drawing.Image.
I thought about saving the image returned to a temporary file, so that I
could get the URL, but I don't know how to do this, or if maybe there is an
easier way to place the image in my ASP.NET WebAplication.
----------------------------------------------------------------------------
------------------------
private void computeButton_Click(object sender, System.EventArgs e)
{
if (kernelLaunched==false)
{
// Inicialize a new instance of the MathKernel class
mathKernel = new Wolfram.NETLink.MathKernel();
// Set the command string that will be passed to
CreateKernelLink
string path = "C:/Archivos de programa/Wolfram
Research/Mathematica/5.0/mathkernel.exe";
mathKernel.LinkArguments = "-linkmode launch -linkname \"" +
path + "\"";
// It is not neccesary to initialize a new instance of the
MathKernel class
kernelLaunched = true;
finishButton.Enabled = kernelLaunched;
}
if (mathKernel.IsComputing)
{
// Send a request to abort the computation currently in progress
mathKernel.Abort();
commentsBox.Text = "COMPUTING";
}
else
{
// Clear out results from previous computation
resultBox.Text = "";
messagesBox.Text = "";
printBox.Text = "";
graphicsImage.ImageUrl = null;
// Create and connect the link, if it has not already been
connected
mathKernel.Connect();
// Perform the computation
mathKernel.Compute(inputBox.Text);
// Populate the boxes with results
resultBox.Text = (string)mathKernel.Result;
foreach (string msg in mathKernel.Messages)
messagesBox.Text += (msg + "\r\n");
foreach (string p in mathKernel.PrintOutput)
printBox.Text += p;
// Populate the image with graphics
// ??? = mathKernel.Graphics[0];
//System.Drawing.Image[]
// graphicsImage.ImageUrl = ???;
//System.Web.UI.WebControls.Image
}
}
Thanks,
Javier Chicote
P.D. I already had a look at the topic
http://forums.wolfram.com/mathgroup/archive/2004/Mar/msg00143.html, that may
be an solution to my problem, but I still cannot view the graphic in my web
application. I enclose the code I have written in C# for WebForm1 and
WebForm2:
============================================================================
========================
WebForm1
============================================================================
========================
<%@ Page language="c#" Codebehind="WebForm1.aspx.cs" AutoEventWireup="false"
Inherits="mathGraph.WebForm1" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
<title>WebForm1</title>
<meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
<meta name="CODE_LANGUAGE" Content="C#">
<meta name="vs_defaultClientScript" content="JavaScript">
<meta name="vs_targetSchema"
content="http://schemas.microsoft.com/intellisense/ie5">
</HEAD>
<body MS_POSITIONING="GridLayout">
<form id="Form1" method="post" runat="server">
<img src="WebForm2.aspx" height="200" width="200" alt="" runat="server"
style="Z-INDEX: 101; LEFT: 16px; POSITION: absolute; TOP: 16px"
ID="Img1">
<asp:TextBox id="TextBox1" style="Z-INDEX: 102; LEFT: 16px; POSITION:
absolute; TOP: 232px" runat="server"
Width="200px"></asp:TextBox>
</form>
</body>
</HTML>
----------------------------------------------------------------------------
------------------------
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
namespace mathGraph
{
/// <summary>
/// Descripción breve de WebForm1.
/// </summary>
public class WebForm1 : System.Web.UI.Page
{
protected System.Web.UI.HtmlControls.HtmlImage Img1;
protected System.Web.UI.WebControls.TextBox TextBox1;
private void Page_Load(object sender, System.EventArgs e)
{
// Introducir aquí el código de usuario para inicializar
la página
}
#region Código generado por el Diseñador de Web Forms
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: llamada requerida por el Diseñador de Web
Forms ASP.NET.
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// Método necesario para admitir el Diseñador. No se puede
modificar
/// el contenido del método con el editor de código.
/// </summary>
private void InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
}
}
============================================================================
========================
WebForm2
============================================================================
========================
<%@ Page language="c#" Codebehind="WebForm2.aspx.cs" AutoEventWireup="false"
Inherits="mathGraph.WebForm2" EnableSessionState="False"
enableViewState="False" contentType="image/jpeg"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
----------------------------------------------------------------------------
------------------------
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using Wolfram.NETLink;
using System.Drawing.Imaging;
namespace mathGraph
{
/// <summary>
/// Descripción breve de WebForm2.
/// </summary>
public class WebForm2 : System.Web.UI.Page
{
protected static Wolfram.NETLink.MathKernel mathKernel;
private void Page_Load(object sender, System.EventArgs e)
{
// Introducir aquí el código de usuario para inicializar
la página
mathKernel = new Wolfram.NETLink.MathKernel();
string path = "C:/Archivos de programa/Wolfram
Research/Mathematica/5.0/mathkernel.exe";
mathKernel.LinkArguments = "-linkmode launch -linkname \""
+ path + "\"";
mathKernel.Connect();
mathKernel.GraphicsHeight=200;
mathKernel.GraphicsWidth=200;
string input = "Plot3D[Sin[x y], {x, -Pi, Pi}, {y, 0
,10}]";
mathKernel.Compute(input);
Bitmap image = new Bitmap(mathKernel.Graphics[0]);
image.Save(Response.OutputStream, ImageFormat.Jpeg);
mathKernel.Dispose();
}
#region Código generado por el Diseñador de Web Forms
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: llamada requerida por el Diseñador de Web
Forms ASP.NET.
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// Método necesario para admitir el Diseñador. No se puede
modificar
/// el contenido del método con el editor de código.
/// </summary>
private void InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
}
}