3

フィールドのデータベースに画像を保存していvarbinary(max)ます。

フォームに画像を表示しようとしています。さまざまな方法を試しましたが、表示されませんでした。

これは私のコードです:

//I am adding an image in my form
Ext.Net.Image image = new Ext.Net.Image();
image.ID = "imgShow";

FormLayout1.Items.Add(image);

byte[] buffer = q.TckLogo;
MemoryStream memStream = new MemoryStream();
memStream.Write(buffer, 0, buffer.Length);

// it is giving error because of FromStream
image.items.Add(Image.FromStream(memStream)); 

フォームに画像を表示するにはどうすればよいですか?

Ext.Net (Coolite) を使用しています。

4

2 に答える 2

4

Web アプリケーションでは、画像コントロールには、画像ImageUrlを返すサーバー側スクリプトを指すプロパティがあります。よくわかりませんExt.Net.Imageが、画像を提供するには http ハンドラーを使用する必要があると思います。

public class ImageHandler : IHttpHandler
{
    public void ProcessRequest(HttpContext context)
    {
        var id = context.Request["id"];
        byte[] imageData = FetchImageFromDb(id);
        context.Response.ContentType = "image/png";
        context.Response.OutputStream.Write(imageData, 0, imageData.Length);
    }

    public bool IsReusable
    {
        get { return true; }
    }
}

次に、画像コントロールがこの汎用ハンドラーを指すようにします。

Ext.Net.Image image = new Ext.Net.Image();
image.ID = "imgShow";
// pass some id to the generic handler which will 
// allow it to fetch the image from the database
// and stream it to the response
image.ImageUrl = "~/ImageHandler.ashx?id=123"; 
FormLayout1.Items.Add(image);
image.items.Add(image);
于 2011-02-20T09:43:04.117 に答える
2

Ext.Net がここにあるのか、なぜそれを使用しているのかは私には明らかではありませんが、FromStream の使用法は、混乱していることを示唆していますSystem.Drawing.Image.FromStream。ただし、Web アプリから System.Drawing を使用しないでください。イメージをクライアントに返すだけの場合は、多くの場合、イメージを処理する必要はまったくありません。BLOBをクライアントに送信するだけです。

無関係ですが、Jon が指摘しているように、MemoryStream の末尾からも読み取ろうとしています。

于 2011-02-20T09:43:51.723 に答える