SoundPlayer sound = new System.Media.SoundPlayer("xxx.wav");
sound.PlaySync(); // 再生が終わるまで実行ブロック
Image img = System.Drawing.Image.FromFile("xxx.png");
img..Save("tmp.bmp", ImageFormat.Bmp);
// WIN32 API 呼び出すおまじない
[StructLayout(LayoutKind.Sequential)]
public struct POINT
{
public int x;
public int y;
}
[System.Runtime.InteropServices.DllImport("user32.dll")]
private static extern bool ClientToScreen(IntPtr hWnd, out POINT point);
Process[] ps = Process.GetProcessesByName("LaTaleClient");
if (ps.Length > 0)
{
POINT pt;
ClientToScreen(ps[0].MainWindowHandle, out pt); // pt.x pt.y に左上の座標が入る
}
Bitmap bmp = new Bitmap(img.Width, img.Height, img.PixelFormat);
Graphics g = Graphics.FromImage(bmp);
g.CopyFromScreen(new Point(pt.x, pt.y), new Point(0, 0), bmp.Size); // 画面の pt 位置から bmp サイズ分を bmp の (0,0) へコピー
BitmapData bd = img.LockBits(new Rectangle(0, 0, img.Width, img.Height), ImageLockMode.ReadOnly, img.PixelFormat);
int bsize = bd.Stride * img.Height;
byte[] byte = new byte[bsize];
Marshal.Copy(bd.Scan0, byte, 0, bsize);
img.UnlockBits(bd);
IntPtr adr = bd.Scan0;
int p = x * 3 + bd.Stride * y;
byte b = Marshal.ReadByte(adr, p + 0);
byte g = Marshal.ReadByte(adr, p + 1);
byte r = Marshal.ReadByte(adr, p + 2);
フォーマットによるのかもだけど x * 3 + y * width * 3 だとうまくデータがとれなくてはまった