- - PR -
ASP.NETでBitBlt()は非対応?
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2005-11-25 11:43
いつも参考にさせて頂いております。
【目的】 読み込んだ二つの画像ファイルをImageButton上で重ね合わせて表示 【現状】 コピー元が表示されず、コピー先しか表示されない Webや書籍など色々と調べたのですがASP.NET上での画像の重ね合わせの 情報は見当たりませんでした。 BitBlt()の処理自体はtrueが返されているので問題はないと思いますが、 その他どこかおかしな点はございますでしょうか? 以下にソースを記載します。[開発環境] C# + ASP.NET(VS2003) 何卒よろしくお願いします。 [DllImport("gdi32.dll",EntryPoint="BitBlt")] public static extern bool BitBlt( IntPtr hdcDest,int xDest,int yDest,int wDest,int hDest, IntPtr hdcSource,int xSrc,int ySrc,int RasterOp); private void Page_Load(object sender, System.EventArgs e) { // コピー先画像:zaseki.png(座席表) // コピー元画像ink.png(熊) string image = "zaseki.png",kuma = "pink.png"; Bitmap bitmap = new Bitmap(Server.MapPath(image)), bitmap_kuma = new Bitmap(Server.MapPath(kuma)); MemoryStream memStream = new MemoryStream(); Graphics g = Graphics.FromImage(bitmap), g_kuma = Graphics.FromImage(bitmap_kuma); IntPtr gHdc = g.GetHdc(),kumaHdc = g_kuma.GetHdc(); bool bRet = false; if(Request.QueryString["xA"] != null && Request.QueryString["yA"] != null) { // マウスのクリックした位置を取得 int x = System.Int32.Parse(Request.QueryString["xA"]); int y = System.Int32.Parse(Request.QueryString["yA"]); // 座席表の上に熊を表示 bRet = BitBlt(gHdc,x,y,bitmap_kuma.Width,bitmap_kuma.Height, kumaHdc,0,0,0x00CC0020/*SRCCOPY*/); } // png bitmap.Save(memStream,System.Drawing.Imaging.ImageFormat.Png); byte[] buf = new byte[memStream.Length]; memStream.Seek(0,System.IO.SeekOrigin.Begin); memStream.Read(buf,0,(int)memStream.Length); Response.OutputStream.Write(buf,0,(int)memStream.Length); g_kuma.ReleaseHdc(kumaHdc); g.ReleaseHdc(gHdc); // Cleanup g.Dispose(); bitmap.Dispose(); g_kuma.Dispose(); bitmap_kuma.Dispose(); } | ||||
|
投稿日時: 2005-11-25 12:42
> 件名:ASP.NETでBitBlt()は非対応?
なぜ、API関数なのでしょうか? .NETのメソッドが分からないのであれば、対応表で探すとよいでしょう。
System.Drawingの話だから、ASP.NETに拘る必要がないです。 .NET Windowsアプリでの方法なら沢山あるのでは? | ||||
|
投稿日時: 2005-11-25 17:41
todoさん、またまた有難うございます。 おかげさまで何とか解決(?)しました。 う〜ん、MSDNにこんな便利な情報があったんですね。 確かに仰るとおり折角.NETでアプリを組むのですからそれらの資産を利用しない と損ですね。 コーディングも短くなりますし。 BitBlt()を利用したのは、今回の機能を実現するにあたってWebでBitBlt()を用い た例をよく見かけたので、C#でもBitBlt()が使えるんだったら・・・と、今まで馴染 みもあるせいもあって何の疑問を持たずに使ってました。 |
1