0

文字列型と System.Drawing.Image のディクショナリを返すコントロールがあります。ディクショナリをループして、各キーと値のペアに含まれるイメージを表示する ASP イメージ コントロールを出力したいと考えています。これは HTTP ハンドラーを介して行う必要があることは理解していますが、その方法がよくわかりません。画像をバイト配列に変換し、ハンドラーからの出力ストリームとして返す必要があると仮定すると、画像またはバイト配列をハンドラーのコンテキストの一部として渡すにはどうすればよいでしょうか?

4

4 に答える 4

0

Content Type と Stream を正しく返す必要があります。この リンクを参照してください。

于 2012-06-18T10:27:01.593 に答える
0

Web で利用可能なほとんどの例では、id が ashx ハンドラーに渡されます。ID とともにハンドラー パスがイメージ コントロールへのソースとして設定されます。ほとんどの場合、ハンドラーへの各リクエストは、DB にアクセスして画像をフェッチし、処理を行い、画像をレンダリングします。

ただし、あなたの場合、既に画像の辞書を持っているようです (したがって、その情報をハンドラーに渡す方法が必要になります)。これにアプローチできる 1 つの方法は、イメージをメモリ ストリームとしてキャッシュし、ashx ハンドラーでキャッシュされたアイテムにアクセスして、後でキャッシュをクリアすることです。これはすでにここで議論されています。しかし、エレガントなソリューションではありません。

Scott Hanselman によるこのブログ投稿もチェックしてください。<asp:image/>

于 2012-06-18T11:51:59.557 に答える
0

ここでは、ディクショナリ オブジェクトをリピーターにバインドしていて、HttpHandler の名前が imageHandler であると想定しています。したがって、辞書オブジェクトがバインドされると、次のようなものが得られます

<ItemTemplate> <asp:Image id="image1" runat="server" ImageUrl='<%# "~/imageHandler.ashx?k=" + Eval("key")%>' /> </ItemTemplate>

httphandler で、キーを提供するクエリ文字列を読み取ります。その後、辞書から system.drawing.image を取得し、その後、それを bytearray に変換してさらに続行できます。

コードをさらにリファクタリングして、すべてのキー値をリストまたは列挙型として取得してバインドし、httphandler でデータベースにクエリを実行できます。

Response.Write(byte array) and response.contenttype= "give the correct content type"

お役に立てれば。

于 2012-06-18T10:28:40.487 に答える
0

Image.Saveメソッドを呼び出すことができます。

using(MemoryStream ms = new MemoryStream())
 {
   image.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
   ms.WriteTo(context.Response.OutputStream);
 }
于 2012-06-18T10:24:24.860 に答える