- - PR -
画像をブラウザで表示MemoryStreamについて
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2002-10-11 17:44
こんばんわ!
現在、ASP.NETで作成(Glaphicオブジェクトを使用)したBitmapオブジェクトをブラウザに表示させているのですが、 どこかのサイトを参考に下記のようなコードを書いてみたところ、 ブラウザに直接表示されず、画像ソフト(PhotoEditer)が立ち上がって、 そこに表示されてしまうのです。 どうすればいいのでしょうか? 作成したBitmapオブジェクトはBitmapObjです 'MemoryStream を作成します。 Dim ms = New MemoryStream() ' MemoryStream(に画像データを保存) BitmapObj.Save(ms, ImageFormat.Png) ' 全ての内容出力をバッファストリームから削除() Response.ClearContent() 'HTTP MIME タイプを image/png に設定 Response.ContentType = "image/png" ' MemoryStream(のデータを書き出す) Response.BinaryWrite(ms.ToArray()) Response.End() BitmapObj.Dispose() |
|
投稿日時: 2002-10-11 20:05
Bitmap bmp = new Bitmap(640,480);
Graphics g = Graphics.FromImage(bmp); //何か適当に描画処理 Response.ContentType = "image/gif"; bmp.Save(Response.OutputStream, ImageFormat.Gif); これでいけないでしょうか? MSDNではIHttpHandlerインターフェースを実装するクラスを独自に書くサンプルが載ってました。 ページ内のimgタグに表示する場合はそっちでやる必要があると思います。 はずしていたらすみません。 |
|
投稿日時: 2002-10-12 13:41
karajanさん返答ありがとうございました!
先ほど自己解決しましたので、報告します。 まず、空のweb page をつくり、その中で bmpオブジェクトをつくり、Graphicsでいろいろ描画しました。 その描画はパラメータを渡すと変形します(折れ線グラフなのです) そして、表示させたいPageにImageコントロールを張ります。 グラフに渡したいデータもこのページでセッション変数に持たせました。 あとは、ImageコントロールのImageURLに 先ほどグラフを描画したページのURL(./sample.aspx)を記入してやりました。 かなり悩みましたが、自分にはこの方法があってそう(汗 他に方法があれば、情報をお待ちしております。 |
|
投稿日時: 2002-10-12 18:26
WebFormページ(.aspx)も当然IHttpHandlerを実装してるんで
<img src="MyImage.aspx"> でいいと思います。 ただ、単にレスポンスのストリームに画像を流すためなら、そのために必要でない機能を多く持ってるWebFormクラスで実装するよりはIHttpHandlerを実装したクラスを作ったほうがいいかもしれません。 ファイル名的にもaspxなのに何もHTMLがなかったりすると??てなるかもしれないし・・・。 実際にMachine.Configの構成を見てみると .aspx -> type="System.Web.UI.PageHandlerFactory" .ashx -> type="System.Web.UI.SimpleHandlerFactory となってて拡張子.ashxファイルを用意して捕まえたほうがスマートなような気がします(単純に私の感覚ですが) 実際に書く場合は、インテリセンスを使用したい場合はコードビハインドにする必要があると思います。 MyImage.ashx ファイル <%@ WebHandler language="C#" Codebehind="MyImage.cs" class="MyImage" %> MyImage.cs ファイル using System; using System.Web; using System.Drawing; using System.Drawing.Imaging; Public class MyImage:IHttpHandler { public bool IsReusable { get{return(true);} } public void ProcessRequest(HttpContext context) { Bitmap bmp = new Bitmap(640,480); Graphics g = Graphics.FromImage(bmp); //描画処理 context.Response.ContentType = "image/gif"; bmp.Save(context.Response.OutputStream,ImageFormat.Gif); bmp.Dispose(); g.Dispose(); } } MyImage.htmlファイル <html><head></head><body><img src="MyImage.ashx"></body></html> ご参考になれば幸いです。 |
1