MVC アプリケーションで (ハンドラーで) AsfMojo を使用して、WMV ファイルから bmp を抽出しています。ローカルホスト IIS7 ではうまく機能しますが、アプリケーションをホスティング サービスに公開すると画像が表示されません。
ビュースクリプト:
<img id="Image1" alt="image" src="ImageHandler.ashx?img=CT0001.wmv" height="512" width="512" />
ハンドラー スクリプト:
string videoname = System.Web.HttpContext.Current.Server.MapPath("Video/" + sImageFileName);
if(File.Exists(videoname))
{
Bitmap bmp = AsfImage.FromFile(videoname).AtOffset(timeOffset);
bmp.Save(objMemoryStream, ImageFormat.Png);
byte[] imageContent = new byte[objMemoryStream.Length];
objMemoryStream.Position = 0;
objMemoryStream.Read(imageContent, 0, (int)objMemoryStream.Length);
context.Response.ContentType = "image/jpeg";
context.Response.BinaryWrite(imageContent);
context.Response.Cache.SetExpires(DateTime.Now.AddMinutes(5));
context.Response.Cache.SetMaxAge(TimeSpan.FromMinutes(5));
Chrome を使用して新しいウィンドウに画像を表示しようとしたときのエラー メッセージは次のとおりです。
Source Error:
An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.
Stack Trace:
[ArgumentNullException: Value cannot be null.
Parameter name: image]
System.Drawing.Graphics.DrawImage(Image image, Int32 x, Int32 y, Int32 width, Int32 height) +1133063
DirectshowTest.ImageHandler.ProcessRequest(HttpContext context) in E:\..\projects\DirectshowTest\DirectshowTest\ImageHandler.ashx.cs:40
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +341
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +69
wmv ファイルのサイズが原因で、ハンドラー スクリプトは次の行でファイル内のすべてのフレームを読み取るまで待機しません。
Bitmap bmp = AsfImage.FromFile(videoname).AtOffset(timeOffset);
運がなくても、connet 応答をキャッシュしようとしました。イメージを生成する前に、ファイルが完全に読み取られたかどうかを確認する方法はありますか。
よろしくお願いします。