MathGroup Archive 2004

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: how to save a mathematica-made imagebox.image as jpg, gif, bmp in c#/.netlink?

  • To: mathgroup at smc.vnet.net
  • Subject: [mg48059] Re: [mg48016] how to save a mathematica-made imagebox.image as jpg, gif, bmp in c#/.netlink?
  • From: Todd Gayley <tgayley at wolfram.com>
  • Date: Mon, 10 May 2004 06:51:15 -0400 (EDT)
  • Sender: owner-wri-mathgroup at wolfram.com

At 03:29 AM 5/7/2004, cdj wrote:
>Hi all,
>
>This has been buggin me for awhile... I'm sure I'm doing something
>silly, but I can't figure out what....
>
>It suffices to consider the following problem:
>
>(1) Use the mathematica-supplied c# example (let's you enter a Mathematica
>statement, compute, and captures output.)
>
>How to save a graphicsBox.Image to a file, say as a jpg?
>
>There's standard code that is available on msdn, to wit:
>
>(2) 
>http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vbcon/html/vbtsksavingfilesusingsavefiledialogcomponent.asp
>
>When I try to join these 2 bits of code together, I get a totally
>uninformative GDI+ error of some sort.
>
>I'm under the impression that the problem is that the Mathematica graphic
>isn't being assigned to the picturebox in the "normal" way, or some
>such thing. The reason I have this impression is that while the
>following code-bits are quite similar, I can save with one, but not
>with the other:
>
>(a) graphicsBox.Image = mathKernel.Graphics[0];
>
>(b) graphicsBox.Image = Image.FromFile("pathtomyfile.jpg");
>
>Can anybody explain to me why the msdn routine works fine with (b),
>but not with (a)?
>
>I've been brief here with the description of my problem - I'm happy to
>expand a bit on anything above, if it would be helpful....
>
>thx much for any insights,


Thanks for tracking down this bug in the MathKernel class. The problems is 
that a 'using' statement is closing the MemoryStream that backs up the 
Image data, which is a no-no (line 693 of MathKernel.cs if you are 
interested). I have fixed the bug for the next release of .NET/Link, but 
you can work around it very simply. Just create a new Bitmap out of the 
image you get from the mathKernel.Graphics array (which is a Bitmap also). 
This apparently copies the data out of the original bitmap into a new one 
backed up by more appropriate data storage:

     graphicsBox.Image = mathKernel.Graphics[0];
     // Add a line like this:
     Bitmap bmp = new Bitmap(graphicsBox.Image);
     // Now use bmp instead of graphicsBox.Image in the MSDN example code 
for saving a file.

Thanks again for finding this. This problem only affects the very 
high-level MathKernel class, not code that calls the 
IKernelLink.evaluateToImage() method directly.


Todd Gayley
Wolfram Research 


  • Prev by Date: Re: how to save a mathematica-made imagebox.image as jpg, gif, bmp in c#/.netlink?
  • Next by Date: RE: Re: kuen surface
  • Previous by thread: Re: how to save a mathematica-made imagebox.image as jpg, gif, bmp in c#/.netlink?
  • Next by thread: Re: how to save a mathematica-made imagebox.image as jpg, gif, bmp in c#/.netlink?