3

潜在的に簡単な質問があります。データベースに画像を保存しています。次に、アプリケーションで C# メソッドを使用して、その画像を取得し、次のようなカスタム クラスに保存します。

public class MyImage
{
 public System.Drawing.Image myImageFromDB;
 public string imageName;
 public int imageNumberInCollection;
}

私の質問は次のとおりです。このクラスの画像を HTML 画像タグで使用できますか/どのように使用できますか? 私は次のことを試みましたが、赤いXが入ったボックスを返すだけです:

//myImageFromDBCollection is a list of MyImage objects
foreach(var ind in myImagesFromDBCollection)
{
  table += String.Format("<image src={0} />", ind.myImageFromDB);
}

私が間違っていることについてのアイデアはありますか?

4

4 に答える 4

11

これを解決するための Brads メソッドを使用することになりました (質問の下のコメントを参照) System.Drawing.Image を取り込んでバイト配列に変換し、そのバイト配列をエンコードして画像を取得するメソッドを作成することになりました。コードは次のようになります。

byte[] imgBytes = turnImageToByteArray(ind.ind.myImageFromDB);
string imgString = Convert.ToBase64String(imgBytes);
table += String.Format("img src=\"data:image/Bmp;base64,{0}\">", imgString);

private byte[] turnImageToByteArray(System.Drawing.Image img)
{
  MemoryStream ms = new MemoryStream();
  img.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp);
  return ms.ToArray();
}

現在、これは私の目的のために機能しているので、いつもみんなが来て助けてくれるので、みんなとその提案に感謝します:-)

于 2012-11-26T21:09:54.290 に答える
3

画像は、汎用ハンドラー (ashx ファイル) を使用して提供できます。

public class StickerHandler : IHttpHandler
{

    public void ProcessRequest(HttpContext context)
    {
        context.Response.ContentType = "image/png";
        context.Response.Cache.SetCacheability(HttpCacheability.Public);
        context.Response.BufferOutput = false;

        //TODO: link your MyImage to iSource using imageId query parameter...
        Image iSource = null;
        MemoryStream ms = new MemoryStream();
        iSource.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
        byte[] data = ms.ToArray();
        ms.Dispose();
        g.Flush();
        g.Dispose();
        iSource.Dispose();

        context.Response.BinaryWrite(data);
    }

    public bool IsReusable
    {
        get
        {
            return true;
        }
    }

}

ジェネリック ハンドラーの詳細については、次を参照してください。

http://msdn.microsoft.com/en-us/library/bb398986(v=vs.100).aspx

画像内:

<img src='StickerHandler.ashx?img=imageId' />

ハッピーコーディング!

于 2012-11-26T20:27:08.070 に答える
1

画像をデータベースに保存する必要がある場合、それらを表示する簡単な方法は、画像ハンドラーを使用することです。

ASHX基本的に、データベース内のイメージ ID であるクエリ文字列を受け取り、正しい MIME タイプとともにイメージ コンテンツを返すハンドラーを作成できます。これは、C# で行うのは非常に簡単です。

<img />その後、指定された ID を持つハンドラーにタグを向けることができます。何かのようなもの

table += String.Format("<image src='/ViewImage.ashx?id={0}' />", ind.myImageId);

ここでは、開始するための基本的なチュートリアルを示します。

一般的なパフォーマンスの向上は、ハンドラー内のディスクに画像をキャッシュすることです。

于 2012-11-26T20:26:43.097 に答える
1

私があなたなら、画像ファイルをディスクに保存し、画像ファイル名だけをデータベースに保存します。

画像のフォーマットに問題がある場合は、ソースを見て、それが正しいことを確認してください。

于 2012-11-26T20:20:04.093 に答える