0

データベースから12個の長いブロブ画像をロードしてリストに保存するプロジェクトに取り組んでいます。

HTML ページで画像を表示する必要がありますが、ブロブを画像に変換しようとするとエラーが発生します。

Parameter is not validメモリ ストリームを使用するとエラーが発生します。どんな変更を加えても、そのエラーを取り除くことはできません。

以下はコードです:

    public Image getProduct_Image(byte[] imagebytes)
    {
        byte[] byteArray = new byte[imagebytes.Length];

        MemoryStream ms = new MemoryStream(byteArray);
        ms.Position = 0;

        ms.Read((byteArray, 0, byteArray.Length);
        ms.ToArray();
        ms.Seek(0, SeekOrigin.Begin);
        System.Drawing.Image returnImage = Image.FromStream((Stream) ms);
             Bitmap bmp = new Bitmap(returnImage);
             return bmp;
    }
4

2 に答える 2

2

私のコメントを拡張する:

.ashxハンドラーを使用すると、数行のコードでバイトからHTMLに画像を書き込むことができますが、MVCを使用しているため、実際には非常に簡単です。

まず、コントローラーアクションを設定します。整数IDに基づいて画像が識別可能であると想定します。これらのバイトをコンテンツとして返すのは1行だけです。

public FileContentResult SomeImage(int id)
{
    byte[] bytes = GetImageBytesFromDatabase(id);
    return File(bytes, "image/jpeg");
}

マークアップは、このコントローラーアクションとしてのソースを含む単なる画像タグです。

<img src="@Url.Action("SomeImage", "Home", new { id = 123 })" />

これにより、ルーティングで特別なことを行っているかどうかに応じて、実際には次のようになります。

<img src="/Home/SomeImage/123" />
or possibly
<img src="/Home/SomeImage?id=123" />
于 2013-02-04T17:47:37.643 に答える
1

byteArray に実際にどこでもデータを入力しているのを見たことはありません。

また、そもそもなぜ byteArray 変数を作成するのですか? 入力変数 imagebytes に blob データが byte[] として既に含まれています。byteArray を削除し、imagebytes を使用します。

public Image getProduct_Image(byte[] imagebytes)
{
    try
    {
        if(imagebytes == null || imagebytes.Length == 0)
            throw new InvalidDataException("The blob does not contain any data");  

        MemoryStream ms = new MemoryStream(imagebytes);
        ms.Position = 0;
        ms.Read((imagebytes, 0, imagebytes.Length);
        ms.ToArray();
        ms.Seek(0, SeekOrigin.Begin);

        System.Drawing.Image returnImage = Image.FromStream((Stream) ms);
        return new Bitmap(returnImage);
    }
    catch(Exception ex)
    {
        // deal with the exception
    }
}
于 2013-02-04T16:30:56.700 に答える