- PR -

ASP.NETでBitBlt()は非対応?

1
投稿者投稿内容
alf
常連さん
会議室デビュー日: 2005/11/15
投稿数: 22
お住まい・勤務地: 岐阜県・愛知県
投稿日時: 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();
}
todo
ぬし
会議室デビュー日: 2003/07/23
投稿数: 682
投稿日時: 2005-11-25 12:42
> 件名:ASP.NETでBitBlt()は非対応?

なぜ、API関数なのでしょうか?
.NETのメソッドが分からないのであれば、対応表で探すとよいでしょう。

引用:

Webや書籍など色々と調べたのですがASP.NET上での画像の重ね合わせの
 情報は見当たりませんでした。



System.Drawingの話だから、ASP.NETに拘る必要がないです。
.NET Windowsアプリでの方法なら沢山あるのでは?
alf
常連さん
会議室デビュー日: 2005/11/15
投稿数: 22
お住まい・勤務地: 岐阜県・愛知県
投稿日時: 2005-11-25 17:41

 todoさん、またまた有難うございます。

 おかげさまで何とか解決(?)しました。

 う〜ん、MSDNにこんな便利な情報があったんですね。
 確かに仰るとおり折角.NETでアプリを組むのですからそれらの資産を利用しない
 と損ですね。
 コーディングも短くなりますし。
 BitBlt()を利用したのは、今回の機能を実現するにあたってWebでBitBlt()を用い
 た例をよく見かけたので、C#でもBitBlt()が使えるんだったら・・・と、今まで馴染
 みもあるせいもあって何の疑問を持たずに使ってました。
1

スキルアップ/キャリアアップ(JOB@IT)