3

Image コントロールに画像を表示しようとしていますが、うまくいきません。基本的にスクリーンショットのプレビューとして使用しています。ビットマップをサーバー パスの Images フォルダーに保存し、コントロールの ImageUrl を保存した画像の場所に設定します。これが私が持っているコードです。このコードは、ボタンのクリックで実行されます。

img.Save(Server.MapPath("~/Images/") + "test.png", ImageFormat.Png);
Image1.ImageUrl = Server.MapPath("~/Images/") + "test.png";
Image1.DataBind();

例外はキャッチされず、画像はパスに正しく保存されています。

4

2 に答える 2

6

URL に Server.MapPath を使用することはできません。これに変更してください (images フォルダーがアプリケーションのルート フォルダーにあると仮定します)。

Image1.ImageUrl = "/images/test.png";

アップデート:

Graymatter が次のようなコメントを提案したように:

Image1.ImageUrl = "~/images/test.png";

画像サーバー制御について話していることを見落としていました

于 2012-07-24T21:33:07.367 に答える
2

アプリケーションの Web フォルダーに直接リンクして書き込みを行うことは、決して良い考えではありません。むしろ、ashx ハンドラーを作成してイメージをストリームバックするルートに進みたいと思います。次のようなファイル (getmyimage.ashx.cs など) を作成できます。

using System;
using System.Web;

public class getmyimage : IHttpHandler 
{
  public void ProcessRequest(HttpContext context)
  {
        Response.ContentType = "image/png";
        Response.WriteFile("x:\myimages\test.png");
        Response.End();
  }

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

getmyimage.ashx には、次のような内容が含まれます。

<% @ webhandler language="C#" class="getmyimage" %>

このコードでは、"x:\myimages\test.png" が、ブラウザーにストリーミングして戻すイメージになります。パラメータを getmyimage.ashx url に追加して、ロードするイメージを指定できます。コードを変更して、その場で画像を生成したり、それらの線に沿って何かを生成したりすることもできます。

次に、画像 URL で「getmyimage.ashx」を指定できます。したがって、imageurl は次のようになります。

Image1.ImageUrl = "getmyimage.ashx"

Antonio がコメントで示したように、必要なキャッシュ オプションのタイプを確認して設定する必要があります。デフォルトの動作では、常に画像を送り返し、キャッシュしません。画像をキャッシュしたい場合は、次の投稿をご覧ください。

キャッシュ ASHX イメージ レスポンス

質問の画像に直接マップするには、これを使用できます。

Image1.ImageUrl = "~/images/test.png"
于 2012-07-24T21:41:05.100 に答える