//★ Win32 API 顔画像の識別 前田 稔
using System;
using System.Drawing;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.Diagnostics;
struct BITMAPINFOHEADER
{
public UInt32 biSize;
public Int32 biWidth;
public Int32 biHeight;
public UInt16 biPlanes;
public UInt16 biBitCount;
public UInt32 biCompression;
public UInt32 biSizeImage;
public Int32 biXPelsPerMeter;
public Int32 biYPelsPerMeter;
public UInt32 biClrUsed;
public UInt32 biClrImportant;
};
unsafe struct BITMAPINFO
{
public BITMAPINFOHEADER bmih;
public fixed UInt32 bmiColors[1];
};
public class MyForm : Form
{ Face App;
bool flag = false;
Point[,] m_t = new Point[10,7]; //Mark Table
int m_idx; //m_t Index
string m_str;
public MyForm()
{
App = new Face();
m_idx = 0;
m_str = "";
Paint += new PaintEventHandler(MyHandler);
MouseDown += new MouseEventHandler(OnMyMouseDown);
}
private void MyHandler(object sender, PaintEventArgs e)
{
Graphics g;
g = e.Graphics;
if (flag==false)
{ g.DrawString("顔画像の識別プログラムです。", Font, Brushes.Black, new PointF(40f, 60f));
g.DrawString("左クリックで登録します。", Font, Brushes.Black, new PointF(40f, 100f));
g.DrawString("右クリックで識別します。", Font, Brushes.Black, new PointF(40f, 140f));
}
else
{ App.View(g,0,0);
App.DrawMark(g);
if (m_str!=string.Empty) MessageBox.Show(m_str);
}
}
private void OnMyMouseDown(object sender, MouseEventArgs e)
{ int i,j;
if (e.Button == MouseButtons.Left) //マウスの左ボタン
{
App.OpenFile();
SetMark();
Width = App.m_bmp.Width;
Height = App.m_bmp.Height+32;
flag = true;
for(i=0; i<7; i++) m_t[m_idx,i]= App.m_pt[i];
m_idx++;
m_str = "顔の画像を登録します";
}
if (e.Button == MouseButtons.Right) //マウスの右ボタン
{
App.OpenFile();
SetMark();
for(j=0; j<m_idx; j++)
{
for(i=0; i<7; i++)
if (m_t[j,i].X != App.m_pt[i].X || m_t[j,i].Y != App.m_pt[i].Y) break;
if (i>=7) break;
}
if (j < m_idx)
m_str = "画像の登録番号は: " + (j + 1) + " 番です";
else
m_str = "登録されていません";
}
Invalidate();
}
// Land Mark を検索
public void SetMark()
{
App.InitDib();
App.CopyBmp(App.m_DibDC);
App.CopyBmp(App.m_MaskDC);
App.Edge(33000);
App.LandMark();
}
public void VerMsg(string msg, int v)
{
string wstr;
wstr = msg + v.ToString();
this.Text = wstr;
}
}
//☆ Face Object Class
unsafe class Face
{
・・・
Face Object Class のソースは Mark Rect を参照して下さい。
・・・
|