<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_wqj1212's blog</title><subtitle type="text">图像处理、机器视觉、机器人、运动控制学习交流!为了梦想而奋斗!找工作！</subtitle><id>http://feed.cnblogs.com/blog/u/31790/rss</id><updated>2012-02-07T01:23:53Z</updated><author><name>wqj1212</name><uri>http://www.cnblogs.com/wqj1212/</uri></author><generator>CNBlogs BlogServer</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/wqj1212/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/31790/rss"/><entry><id>http://www.cnblogs.com/wqj1212/archive/2012/02/07/2340861.html</id><title type="text">j截图Code</title><summary type="text">void CjietuDlg::copyScreen(CHAR * filename){ HDC hScrDC, hMemDC; int width, height; //the pointer will save all pixel point&amp;#39;s color value BYTE *lpBitmapBits = NULL; //creates a device context for the screen device hScrDC = CreateDC(TEXT(&amp;quot;DISPLAY&amp;quot;), NULL, NULL, NULL); //get the screen p</summary><published>2012-02-07T01:24:00Z</published><updated>2012-02-07T01:24:00Z</updated><author><name>wqj1212</name><uri>http://www.cnblogs.com/wqj1212/</uri></author><link rel="alternate" href="http://www.cnblogs.com/wqj1212/archive/2012/02/07/2340861.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/wqj1212/archive/2012/02/07/2340861.html"/><content type="html">&lt;p align="left"&gt;&lt;span style="font-family: 新宋体; font-size: 12pt"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: 新宋体; color: blue; font-size: 12pt"&gt;void&lt;/span&gt;&lt;span style="font-family: 新宋体; font-size: 12pt"&gt; &lt;span style="color: #010001"&gt;CjietuDlg&lt;/span&gt;::&lt;span style="color: #010001"&gt;copyScreen&lt;/span&gt;(&lt;span style="color: #010001"&gt;CHAR&lt;/span&gt; * &lt;span style="color: #010001"&gt;filename&lt;/span&gt;)&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: 新宋体; font-size: 12pt"&gt;{&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: 新宋体; font-size: 12pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #010001"&gt;HDC&lt;/span&gt; &lt;span style="color: #010001"&gt;hScrDC&lt;/span&gt;, &lt;span style="color: #010001"&gt;hMemDC&lt;/span&gt;; &lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: 新宋体; font-size: 12pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;int&lt;/span&gt; &lt;span style="color: #010001"&gt;width&lt;/span&gt;, &lt;span style="color: #010001"&gt;height&lt;/span&gt;;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: 新宋体; font-size: 12pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green"&gt;//the pointer will save all pixel point's color value&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: 新宋体; font-size: 12pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #010001"&gt;BYTE&lt;/span&gt; *&lt;span style="color: #010001"&gt;lpBitmapBits&lt;/span&gt; = &lt;span style="color: #010001"&gt;NULL&lt;/span&gt;; &lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: 新宋体; font-size: 12pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green"&gt;//creates a device context for the screen device&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: 新宋体; font-size: 12pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #010001"&gt;hScrDC&lt;/span&gt; = &lt;span style="color: #010001"&gt;CreateDC&lt;/span&gt;(&lt;span style="color: #010001"&gt;TEXT&lt;/span&gt;(&lt;span style="color: #a31515"&gt;"DISPLAY"&lt;/span&gt;), &lt;span style="color: #010001"&gt;NULL&lt;/span&gt;, &lt;span style="color: #010001"&gt;NULL&lt;/span&gt;, &lt;span style="color: #010001"&gt;NULL&lt;/span&gt;); &lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: 新宋体; font-size: 12pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green"&gt;//get the screen point size&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: 新宋体; font-size: 12pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #010001"&gt;width&lt;/span&gt; = &lt;span style="color: #010001"&gt;GetDeviceCaps&lt;/span&gt;(&lt;span style="color: #010001"&gt;hScrDC&lt;/span&gt;, &lt;span style="color: #010001"&gt;HORZRES&lt;/span&gt;);&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: 新宋体; font-size: 12pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #010001"&gt;height&lt;/span&gt; = &lt;span style="color: #010001"&gt;GetDeviceCaps&lt;/span&gt;(&lt;span style="color: #010001"&gt;hScrDC&lt;/span&gt;, &lt;span style="color: #010001"&gt;VERTRES&lt;/span&gt;); &lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: 新宋体; font-size: 12pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green"&gt;//creates a memory device context (DC) compatible with the screen device(hScrDC) &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: 新宋体; font-size: 12pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #010001"&gt;hMemDC&lt;/span&gt; = &lt;span style="color: #010001"&gt;CreateCompatibleDC&lt;/span&gt;(&lt;span style="color: #010001"&gt;hScrDC&lt;/span&gt;); &lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: 新宋体; font-size: 12pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green"&gt;//initialise the struct BITMAPINFO for the bimap infomation&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 新宋体; color: green; font-size: 12pt"&gt;，&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: 新宋体; font-size: 12pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green"&gt;//in order to use the function CreateDIBSection&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: 新宋体; font-size: 12pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green"&gt;// on wince os, each pixel stored by 24 bits(biBitCount=24)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: 新宋体; font-size: 12pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green"&gt;//and no compressing(biCompression=0) &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: 新宋体; font-size: 12pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #010001"&gt;BITMAPINFO&lt;/span&gt; &lt;span style="color: #010001"&gt;RGB24BitsBITMAPINFO&lt;/span&gt;; &lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: 新宋体; font-size: 12pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #010001"&gt;ZeroMemory&lt;/span&gt;(&amp;amp;&lt;span style="color: #010001"&gt;RGB24BitsBITMAPINFO&lt;/span&gt;, &lt;span style="color: blue"&gt;sizeof&lt;/span&gt;(&lt;span style="color: #010001"&gt;BITMAPINFO&lt;/span&gt;));&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: 新宋体; font-size: 12pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #010001"&gt;RGB24BitsBITMAPINFO&lt;/span&gt;.&lt;span style="color: #010001"&gt;bmiHeader&lt;/span&gt;.&lt;span style="color: #010001"&gt;biSize&lt;/span&gt; = &lt;span style="color: blue"&gt;sizeof&lt;/span&gt;(&lt;span style="color: #010001"&gt;BITMAPINFOHEADER&lt;/span&gt;);&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: 新宋体; font-size: 12pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #010001"&gt;RGB24BitsBITMAPINFO&lt;/span&gt;.&lt;span style="color: #010001"&gt;bmiHeader&lt;/span&gt;.&lt;span style="color: #010001"&gt;biWidth&lt;/span&gt; = &lt;span style="color: #010001"&gt;width&lt;/span&gt;;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: 新宋体; font-size: 12pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #010001"&gt;RGB24BitsBITMAPINFO&lt;/span&gt;.&lt;span style="color: #010001"&gt;bmiHeader&lt;/span&gt;.&lt;span style="color: #010001"&gt;biHeight&lt;/span&gt; = &lt;span style="color: #010001"&gt;height&lt;/span&gt;;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: 新宋体; font-size: 12pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #010001"&gt;RGB24BitsBITMAPINFO&lt;/span&gt;.&lt;span style="color: #010001"&gt;bmiHeader&lt;/span&gt;.&lt;span style="color: #010001"&gt;biPlanes&lt;/span&gt; = 1;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: 新宋体; font-size: 12pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #010001"&gt;RGB24BitsBITMAPINFO&lt;/span&gt;.&lt;span style="color: #010001"&gt;bmiHeader&lt;/span&gt;.&lt;span style="color: #010001"&gt;biBitCount&lt;/span&gt; = 24;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: 新宋体; font-size: 12pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green"&gt;//use the function CreateDIBSection and SelectObject&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: 新宋体; font-size: 12pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green"&gt;//in order to get the bimap pointer : lpBitmapBits &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: 新宋体; font-size: 12pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #010001"&gt;HBITMAP&lt;/span&gt; &lt;span style="color: #010001"&gt;directBmp&lt;/span&gt; = &lt;span style="color: #010001"&gt;CreateDIBSection&lt;/span&gt;(&lt;span style="color: #010001"&gt;hMemDC&lt;/span&gt;, (&lt;span style="color: #010001"&gt;BITMAPINFO&lt;/span&gt;*)&amp;amp;&lt;span style="color: #010001"&gt;RGB24BitsBITMAPINFO&lt;/span&gt;, &lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: 新宋体; font-size: 12pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #010001"&gt;DIB_RGB_COLORS&lt;/span&gt;, (&lt;span style="color: blue"&gt;void&lt;/span&gt; **)&amp;amp;&lt;span style="color: #010001"&gt;lpBitmapBits&lt;/span&gt;, &lt;span style="color: #010001"&gt;NULL&lt;/span&gt;, 0);&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: 新宋体; font-size: 12pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #010001"&gt;HGDIOBJ&lt;/span&gt; &lt;span style="color: #010001"&gt;previousObject&lt;/span&gt; = &lt;span style="color: #010001"&gt;SelectObject&lt;/span&gt;(&lt;span style="color: #010001"&gt;hMemDC&lt;/span&gt;, &lt;span style="color: #010001"&gt;directBmp&lt;/span&gt;); &lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: 新宋体; font-size: 12pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green"&gt;// copy the screen dc to the memory dc&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: 新宋体; font-size: 12pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #010001"&gt;BitBlt&lt;/span&gt;(&lt;span style="color: #010001"&gt;hMemDC&lt;/span&gt;, 0, 0, &lt;span style="color: #010001"&gt;width&lt;/span&gt;, &lt;span style="color: #010001"&gt;height&lt;/span&gt;,&lt;span style="color: #010001"&gt;hScrDC&lt;/span&gt;, 0, 0, &lt;span style="color: #010001"&gt;SRCCOPY&lt;/span&gt;);&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: 新宋体; font-size: 12pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green"&gt;//if you only want to get the every pixel color value, &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: 新宋体; font-size: 12pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green"&gt;//you can begin here and the following part of this function will be unuseful;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: 新宋体; font-size: 12pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green"&gt;//the following part is in order to write file; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: 新宋体; font-size: 12pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green"&gt;//bimap file header in order to write bmp file &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: 新宋体; font-size: 12pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #010001"&gt;BITMAPFILEHEADER&lt;/span&gt; &lt;span style="color: #010001"&gt;bmBITMAPFILEHEADER&lt;/span&gt;;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: 新宋体; font-size: 12pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #010001"&gt;ZeroMemory&lt;/span&gt;(&amp;amp;&lt;span style="color: #010001"&gt;bmBITMAPFILEHEADER&lt;/span&gt;, &lt;span style="color: blue"&gt;sizeof&lt;/span&gt;(&lt;span style="color: #010001"&gt;BITMAPFILEHEADER&lt;/span&gt;));&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: 新宋体; font-size: 12pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #010001"&gt;bmBITMAPFILEHEADER&lt;/span&gt;.&lt;span style="color: #010001"&gt;bfType&lt;/span&gt; = 0x4d42; &lt;span style="color: green"&gt;//bmp &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: 新宋体; font-size: 12pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #010001"&gt;bmBITMAPFILEHEADER&lt;/span&gt;.&lt;span style="color: #010001"&gt;bfOffBits&lt;/span&gt; = &lt;span style="color: blue"&gt;sizeof&lt;/span&gt;(&lt;span style="color: #010001"&gt;BITMAPFILEHEADER&lt;/span&gt;) + &lt;span style="color: blue"&gt;sizeof&lt;/span&gt;(&lt;span style="color: #010001"&gt;BITMAPINFOHEADER&lt;/span&gt;);&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: 新宋体; font-size: 12pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #010001"&gt;bmBITMAPFILEHEADER&lt;/span&gt;.&lt;span style="color: #010001"&gt;bfSize&lt;/span&gt; = &lt;span style="color: #010001"&gt;bmBITMAPFILEHEADER&lt;/span&gt;.&lt;span style="color: #010001"&gt;bfOffBits&lt;/span&gt; + ((&lt;span style="color: #010001"&gt;width&lt;/span&gt;*&lt;span style="color: #010001"&gt;height&lt;/span&gt;)*3); &lt;span style="color: green"&gt;///3=(24 / 8)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: 新宋体; font-size: 12pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green"&gt;//write into file&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: 新宋体; font-size: 12pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #010001"&gt;FILE&lt;/span&gt; *&lt;span style="color: #010001"&gt;mStream&lt;/span&gt; = &lt;span style="color: #010001"&gt;NULL&lt;/span&gt;;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: 新宋体; font-size: 12pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;if&lt;/span&gt;((&lt;span style="color: #010001"&gt;mStream&lt;/span&gt; = &lt;span style="color: #010001"&gt;fopen&lt;/span&gt;(&lt;span style="color: #010001"&gt;filename&lt;/span&gt;, &lt;span style="color: #a31515"&gt;"wb"&lt;/span&gt;)))&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: 新宋体; font-size: 12pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: 新宋体; font-size: 12pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green"&gt;//write bitmap file header&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: 新宋体; font-size: 12pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #010001"&gt;fwrite&lt;/span&gt;(&amp;amp;&lt;span style="color: #010001"&gt;bmBITMAPFILEHEADER&lt;/span&gt;, &lt;span style="color: blue"&gt;sizeof&lt;/span&gt;(&lt;span style="color: #010001"&gt;BITMAPFILEHEADER&lt;/span&gt;), 1, &lt;span style="color: #010001"&gt;mStream&lt;/span&gt;);&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: 新宋体; font-size: 12pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green"&gt;//write bitmap info&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: 新宋体; font-size: 12pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #010001"&gt;fwrite&lt;/span&gt;(&amp;amp;(&lt;span style="color: #010001"&gt;RGB24BitsBITMAPINFO&lt;/span&gt;.&lt;span style="color: #010001"&gt;bmiHeader&lt;/span&gt;), &lt;span style="color: blue"&gt;sizeof&lt;/span&gt;(&lt;span style="color: #010001"&gt;BITMAPINFOHEADER&lt;/span&gt;), 1, &lt;span style="color: #010001"&gt;mStream&lt;/span&gt;);&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: 新宋体; font-size: 12pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green"&gt;//write bitmap pixels data&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: 新宋体; font-size: 12pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #010001"&gt;fwrite&lt;/span&gt;(&lt;span style="color: #010001"&gt;lpBitmapBits&lt;/span&gt;, 3*&lt;span style="color: #010001"&gt;width&lt;/span&gt;*&lt;span style="color: #010001"&gt;height&lt;/span&gt;, 1, &lt;span style="color: #010001"&gt;mStream&lt;/span&gt;);&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: 新宋体; font-size: 12pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green"&gt;//close file&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: 新宋体; font-size: 12pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #010001"&gt;fclose&lt;/span&gt;(&lt;span style="color: #010001"&gt;mStream&lt;/span&gt;);&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: 新宋体; font-size: 12pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: 新宋体; font-size: 12pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green"&gt;//delete&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: 新宋体; font-size: 12pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #010001"&gt;DeleteObject&lt;/span&gt;(&lt;span style="color: #010001"&gt;hMemDC&lt;/span&gt;);&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: 新宋体; font-size: 12pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #010001"&gt;DeleteObject&lt;/span&gt;(&lt;span style="color: #010001"&gt;hScrDC&lt;/span&gt;);&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: 新宋体; font-size: 12pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #010001"&gt;DeleteObject&lt;/span&gt;(&lt;span style="color: #010001"&gt;directBmp&lt;/span&gt;);&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: 新宋体; font-size: 12pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #010001"&gt;DeleteObject&lt;/span&gt;(&lt;span style="color: #010001"&gt;previousObject&lt;/span&gt;);&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: 新宋体; font-size: 12pt"&gt;} &lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: 新宋体; color: blue; font-size: 12pt"&gt;void&lt;/span&gt;&lt;span style="font-family: 新宋体; font-size: 12pt"&gt; &lt;span style="color: #010001"&gt;CjietuDlg&lt;/span&gt;::&lt;span style="color: #010001"&gt;OnBnClickedOk&lt;/span&gt;()&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: 新宋体; font-size: 12pt"&gt;{&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: 新宋体; font-size: 12pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green"&gt;// TODO: Add your control notification handler code here&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: 新宋体; font-size: 12pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;static&lt;/span&gt; &lt;span style="color: blue"&gt;int&lt;/span&gt; &lt;span style="color: #010001"&gt;iN&lt;/span&gt;=0;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: 新宋体; font-size: 12pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #010001"&gt;CString&lt;/span&gt; &lt;span style="color: #010001"&gt;str&lt;/span&gt;(&lt;span style="color: #a31515"&gt;""&lt;/span&gt;);&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: 新宋体; font-size: 12pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #010001"&gt;str&lt;/span&gt;.&lt;span style="color: #010001"&gt;Format&lt;/span&gt;(&lt;span style="color: #010001"&gt;L&lt;/span&gt;&lt;span style="color: #a31515"&gt;"%d.bmp"&lt;/span&gt;,&lt;span style="color: #010001"&gt;iN&lt;/span&gt;);&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: 新宋体; font-size: 12pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;char&lt;/span&gt;&amp;nbsp;&amp;nbsp; &lt;span style="color: #010001"&gt;charTest&lt;/span&gt;[512]; &lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: 新宋体; font-size: 12pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #010001"&gt;WideCharToMultiByte&lt;/span&gt;(&lt;span style="color: #010001"&gt;CP_ACP&lt;/span&gt;,0,&lt;span style="color: #010001"&gt;str&lt;/span&gt;,-1,&lt;span style="color: #010001"&gt;charTest&lt;/span&gt;,512,&lt;span style="color: #010001"&gt;NULL&lt;/span&gt;,&lt;span style="color: #010001"&gt;NULL&lt;/span&gt;); &lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: 新宋体; font-size: 12pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #010001"&gt;copyScreen&lt;/span&gt;(&lt;span style="color: #010001"&gt;charTest&lt;/span&gt;);&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: 新宋体; font-size: 12pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #010001"&gt;iN&lt;/span&gt;++;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: 新宋体; font-size: 12pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green"&gt;//OnOK();&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-family: 新宋体; font-size: 12pt"&gt;}&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/wqj1212/aggbug/2340861.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/wqj1212/archive/2012/02/07/2340861.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/wqj1212/archive/2011/12/28/2305045.html</id><title type="text">BYTE与_int64转换</title><summary type="text">BYTE workP[8]={8,7,6,5,4,3,2,1};_int64 woe=0;_int64 bitMask[8];_int64 bitMaskTemp=1;bitMask[0]=1;for(int j=1;j&amp;lt;=56;j++){bitMaskTemp=2*bitMaskTemp;if(j==8)bitMask[1] = bitMaskTemp;if(j==16)bitMask[2] = bitMaskTemp;if(j==24)bitMask[3] = bitMaskTemp;if(j==32)bitMask[4] = bitMaskTemp;if(j==40)bitMask</summary><published>2011-12-28T08:57:00Z</published><updated>2011-12-28T08:57:00Z</updated><author><name>wqj1212</name><uri>http://www.cnblogs.com/wqj1212/</uri></author><link rel="alternate" href="http://www.cnblogs.com/wqj1212/archive/2011/12/28/2305045.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/wqj1212/archive/2011/12/28/2305045.html"/><content type="html">&lt;p&gt;BYTE workP[8]={8,7,6,5,4,3,2,1};&lt;br /&gt;&amp;nbsp;_int64 woe=0;&lt;/p&gt;&#xD;
&lt;p&gt;_int64 bitMask[8];&lt;br /&gt;&amp;nbsp;_int64 bitMaskTemp=1;&lt;br /&gt;&amp;nbsp;bitMask[0]=1;&lt;br /&gt;&amp;nbsp;for(int j=1;j&amp;lt;=56;j++)&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;bitMaskTemp=2*bitMaskTemp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;if(j==8)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;bitMask[1] = bitMaskTemp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;if(j==16)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;bitMask[2] = bitMaskTemp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;if(j==24)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;bitMask[3] = bitMaskTemp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;if(j==32)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;bitMask[4] = bitMaskTemp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;if(j==40)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;bitMask[5]= bitMaskTemp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;if(j==48)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;bitMask[6] = bitMaskTemp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;if(j==56)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;bitMask[7] = bitMaskTemp;&lt;br /&gt;&amp;nbsp;}&lt;/p&gt;&#xD;
&lt;p&gt;for(int i=0;i&amp;lt;8;i++)&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;woe+=workP[i]*bitMask[i];&lt;/p&gt;&#xD;
&lt;p&gt;}&lt;/p&gt;&#xD;
&lt;p&gt;BYTE a0=woe &amp;amp; 0xFF;&lt;br /&gt;&amp;nbsp;BYTE a1= (woe&amp;gt;&amp;gt;8) &amp;amp; 0xFF;&lt;br /&gt;&amp;nbsp;BYTE a2=(woe&amp;gt;&amp;gt;16) &amp;amp; 0xFF;&lt;br /&gt;&amp;nbsp;BYTE a3=(woe&amp;gt;&amp;gt;24) &amp;amp; 0xFF;&lt;br /&gt;&amp;nbsp;BYTE a4=(woe&amp;gt;&amp;gt;32) &amp;amp; 0xFF;&lt;br /&gt;&amp;nbsp;BYTE a5=(woe&amp;gt;&amp;gt;40) &amp;amp; 0xFF;&lt;br /&gt;&amp;nbsp;BYTE a6=(woe&amp;gt;&amp;gt;48) &amp;amp; 0xFF;&lt;br /&gt;&amp;nbsp;BYTE a7=(woe&amp;gt;&amp;gt;56) &amp;amp; 0xFF;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/wqj1212/aggbug/2305045.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/wqj1212/archive/2011/12/28/2305045.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/wqj1212/archive/2011/11/14/2248343.html</id><title type="text">英语中of和for用法有什么区别？</title><summary type="text">for 表原因、目的 of 表从属关系介词of的用法（1）所有关系this is a picture of a classroom（2）部分关系a piece of papera cup of teaa glass of watera bottle of milkwhat kind of football，american of soccer？（3）描写关系a man of thirty 三十岁的人a man of shanghai 上海人（4）承受动作the exploitation of man by man．人对人的剥削。（5）同位关系it was a cold spring morni</summary><published>2011-11-14T06:19:00Z</published><updated>2011-11-14T06:19:00Z</updated><author><name>wqj1212</name><uri>http://www.cnblogs.com/wqj1212/</uri></author><link rel="alternate" href="http://www.cnblogs.com/wqj1212/archive/2011/11/14/2248343.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/wqj1212/archive/2011/11/14/2248343.html"/><content type="html">for 表原因、目的 &#xD;
&lt;p _extended="true"&gt;&lt;/p&gt;&#xD;
&lt;p _extended="true"&gt;of 表从属关系&lt;/p&gt;&#xD;
&lt;p _extended="true"&gt;&lt;a href="http://wenwen.soso.com/z/Search.e?sp=S%E4%BB%8B%E8%AF%8D&amp;amp;ch=w.search.yjjlink&amp;amp;cid=w.search.yjjlink" target="_blank"&gt;&lt;font color="#005599"&gt;介词&lt;/font&gt;&lt;/a&gt;of的用法&lt;/p&gt;&#xD;
&lt;p _extended="true"&gt;（1）所有关系&lt;/p&gt;&#xD;
&lt;p _extended="true"&gt;this is a picture of a classroom&lt;/p&gt;&#xD;
&lt;p _extended="true"&gt;（2）部分关系&lt;/p&gt;&#xD;
&lt;p _extended="true"&gt;a piece of paper&lt;/p&gt;&#xD;
&lt;p _extended="true"&gt;a cup of tea&lt;/p&gt;&#xD;
&lt;p _extended="true"&gt;a glass of water&lt;/p&gt;&#xD;
&lt;p _extended="true"&gt;a bottle of milk&lt;/p&gt;&#xD;
&lt;p _extended="true"&gt;what kind of football，american of soccer？&lt;/p&gt;&#xD;
&lt;p _extended="true"&gt;（3）描写关系&lt;/p&gt;&#xD;
&lt;p _extended="true"&gt;a man of thirty 三十岁的人&lt;/p&gt;&#xD;
&lt;p _extended="true"&gt;a man of shanghai &lt;a href="http://wenwen.soso.com/z/Search.e?sp=S%E4%B8%8A%E6%B5%B7%E4%BA%BA&amp;amp;ch=w.search.yjjlink&amp;amp;cid=w.search.yjjlink" target="_blank"&gt;&lt;font color="#005599"&gt;上海人&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p _extended="true"&gt;（4）承受动作&lt;/p&gt;&#xD;
&lt;p _extended="true"&gt;the exploitation of man by man．人对人的剥削。&lt;/p&gt;&#xD;
&lt;p _extended="true"&gt;（5）同位关系&lt;/p&gt;&#xD;
&lt;p _extended="true"&gt;it was a cold spring morning in the city of london in england．&lt;/p&gt;&#xD;
&lt;p _extended="true"&gt;（6）关于，对于&lt;/p&gt;&#xD;
&lt;p _extended="true"&gt;what do you think of chinese food？&lt;/p&gt;&#xD;
&lt;p _extended="true"&gt;你觉得&lt;a href="http://wenwen.soso.com/z/Search.e?sp=S%E4%B8%AD%E5%9B%BD%E9%A3%9F%E5%93%81&amp;amp;ch=w.search.yjjlink&amp;amp;cid=w.search.yjjlink" target="_blank"&gt;&lt;font color="#005599"&gt;中国食品&lt;/font&gt;&lt;/a&gt;怎么样？&lt;/p&gt;&#xD;
&lt;p _extended="true"&gt;介词 for 的用法&lt;a href="http://wenwen.soso.com/z/Search.e?sp=S%E5%B0%8F%E7%BB%93&amp;amp;ch=w.search.yjjlink&amp;amp;cid=w.search.yjjlink" target="_blank"&gt;&lt;font color="#005599"&gt;小结&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p _extended="true"&gt;1. 表示&amp;#8220;当作、作为&amp;#8221;。如:&lt;/p&gt;&#xD;
&lt;p _extended="true"&gt;i like some bread and milk for breakfast. 我喜欢把&lt;a href="http://wenwen.soso.com/z/Search.e?sp=S%E9%9D%A2%E5%8C%85&amp;amp;ch=w.search.yjjlink&amp;amp;cid=w.search.yjjlink" target="_blank"&gt;&lt;font color="#005599"&gt;面包&lt;/font&gt;&lt;/a&gt;和牛奶作为早餐。&lt;/p&gt;&#xD;
&lt;p _extended="true"&gt;what will we have for supper? 我们晚餐吃什么?&lt;/p&gt;&#xD;
&lt;p _extended="true"&gt;2. 表示理由或原因,意为&amp;#8220;因为、由于&amp;#8221;。如:&lt;/p&gt;&#xD;
&lt;p _extended="true"&gt;thank you for helping me with my english. 谢谢你帮我&lt;a href="http://wenwen.soso.com/z/Search.e?sp=S%E5%AD%A6%E4%B9%A0%E8%8B%B1%E8%AF%AD&amp;amp;ch=w.search.yjjlink&amp;amp;cid=w.search.yjjlink" target="_blank"&gt;&lt;font color="#005599"&gt;学习英语&lt;/font&gt;&lt;/a&gt;。&lt;/p&gt;&#xD;
&lt;p _extended="true"&gt;thank you for your last letter. 谢谢你上次的来信。&lt;/p&gt;&#xD;
&lt;p _extended="true"&gt;thank you for teaching us so well. 感谢你如此尽心地教我们。&lt;/p&gt;&#xD;
&lt;p _extended="true"&gt;3. 表示动作的对象或接受者,意为&amp;#8220;给&amp;#8230;&amp;#8230;&amp;#8221;、&amp;#8220;对&amp;#8230;&amp;#8230; (而言)&amp;#8221;。如:&lt;/p&gt;&#xD;
&lt;p _extended="true"&gt;let me pick it up for you. 让我为你捡起来。&lt;/p&gt;&#xD;
&lt;p _extended="true"&gt;watching tv too much is bad for your health. 看电视太多有害于你的健康。&lt;/p&gt;&#xD;
&lt;p _extended="true"&gt;4. 表示时间、距离,意为&amp;#8220;计、达&amp;#8221;。如:&lt;/p&gt;&#xD;
&lt;p _extended="true"&gt;i usually do the running for an hour in the morning. 我早晨通常跑步一小时。&lt;/p&gt;&#xD;
&lt;p _extended="true"&gt;we will stay there for two days. 我们将在那里逗留两天。&lt;/p&gt;&#xD;
&lt;p _extended="true"&gt;5. 表示去向、目的,意为&amp;#8220;向、往、取、买&amp;#8221;等。如:&lt;/p&gt;&#xD;
&lt;p _extended="true"&gt;let&amp;#8217;s go for a walk. 我们出去散步吧。&lt;/p&gt;&#xD;
&lt;p _extended="true"&gt;i came here for my schoolbag.我来这儿取书包。&lt;/p&gt;&#xD;
&lt;p _extended="true"&gt;i paid twenty yuan for the dictionary. 我花了20元买这本词典。&lt;/p&gt;&#xD;
&lt;p _extended="true"&gt;6. 表示所属关系或用途,意为&amp;#8220;为、适于&amp;#8230;&amp;#8230;的&amp;#8221;。如:&lt;/p&gt;&#xD;
&lt;p _extended="true"&gt;it&amp;#8217;s time for school. 到上学的时间了。&lt;/p&gt;&#xD;
&lt;p _extended="true"&gt;here is a letter for you. 这儿有你的一封信。&lt;/p&gt;&#xD;
&lt;p _extended="true"&gt;7. 表示&amp;#8220;支持、赞成&amp;#8221;。如:&lt;/p&gt;&#xD;
&lt;p _extended="true"&gt;are you for this plan or against it? 你是支持还是反对这个计划?&lt;/p&gt;&#xD;
&lt;p _extended="true"&gt;8. 用于一些固定搭配中。如:&lt;/p&gt;&#xD;
&lt;p _extended="true"&gt;who are you waiting for? 你在等谁?&lt;/p&gt;&#xD;
&lt;p _extended="true"&gt;for example, mr green is a kind teacher. 比如,格林先生是一位心地善良的老师&lt;/p&gt;&lt;img src="http://www.cnblogs.com/wqj1212/aggbug/2248343.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/wqj1212/archive/2011/11/14/2248343.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/wqj1212/archive/2011/11/14/2248318.html</id><title type="text">英语教案－with用法小结</title><summary type="text">英语学习者在学习过程中，常会遇到with这个介词，而这个词在不同的语言环境中，其含义不近相同，经常让你无从下手，这里笔者对with用法做一小结，以供读者参考。 一、with表拥有某物 Marymarriedamanwithalotofmoney. 马莉嫁给了一个有着很多钱的男人。 Ioftendreamofabighousewithanicegarden. 我经常梦想有一个带花园的大房子。 Theoldmanlivedwithalittledogonthelonelyisland. 这个老人和一条小狗住在荒岛上。 二、with表用某种工具或手段 Icuttheapplewithasharpkn</summary><published>2011-11-14T06:07:00Z</published><updated>2011-11-14T06:07:00Z</updated><author><name>wqj1212</name><uri>http://www.cnblogs.com/wqj1212/</uri></author><link rel="alternate" href="http://www.cnblogs.com/wqj1212/archive/2011/11/14/2248318.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/wqj1212/archive/2011/11/14/2248318.html"/><content type="html">英语学习者在学习过程中，常会遇到with这个介词，而这个词在不同的语言环境中，其含义不近相同，经常让你无从下手，这里笔者对with用法做一小结，以供读者参考。&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;br /&gt;一、with表拥有某物&amp;nbsp;&amp;nbsp; &lt;br /&gt;Mary&amp;nbsp;married&amp;nbsp;a&amp;nbsp;man&amp;nbsp;with&amp;nbsp;a&amp;nbsp;lot&amp;nbsp;of&amp;nbsp;money&amp;nbsp;.&amp;nbsp;&amp;nbsp; &lt;br /&gt;马莉嫁给了一个有着很多钱的男人。&amp;nbsp;&amp;nbsp; &lt;br /&gt;I&amp;nbsp;often&amp;nbsp;dream&amp;nbsp;of&amp;nbsp;a&amp;nbsp;big&amp;nbsp;house&amp;nbsp;with&amp;nbsp;a&amp;nbsp;nice&amp;nbsp;garden&amp;nbsp;.&amp;nbsp;&amp;nbsp; &lt;br /&gt;我经常梦想有一个带花园的大房子。&amp;nbsp;&amp;nbsp; &lt;br /&gt;The&amp;nbsp;old&amp;nbsp;man&amp;nbsp;lived&amp;nbsp;with&amp;nbsp;a&amp;nbsp;little&amp;nbsp;dog&amp;nbsp;on&amp;nbsp;the&amp;nbsp;lonely&amp;nbsp;island&amp;nbsp;.&amp;nbsp;&amp;nbsp; &lt;br /&gt;这个老人和一条小狗住在荒岛上。&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;br /&gt;二、with表用某种工具或手段&amp;nbsp;&amp;nbsp; &lt;br /&gt;I&amp;nbsp;cut&amp;nbsp;the&amp;nbsp;apple&amp;nbsp;with&amp;nbsp;a&amp;nbsp;sharp&amp;nbsp;knife&amp;nbsp;.&amp;nbsp;&amp;nbsp; &lt;br /&gt;我用一把锋利的刀削平果。&amp;nbsp;&amp;nbsp; &lt;br /&gt;Tom&amp;nbsp;drew&amp;nbsp;the&amp;nbsp;picture&amp;nbsp;with&amp;nbsp;a&amp;nbsp;pencil&amp;nbsp;.&amp;nbsp;&amp;nbsp; &lt;br /&gt;汤母用铅笔画画。&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;br /&gt;三、with表人与人之间的协同关系&amp;nbsp;&amp;nbsp; &lt;br /&gt;make&amp;nbsp;friends&amp;nbsp;with&amp;nbsp;sb&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;talk&amp;nbsp;with&amp;nbsp;sb&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;quarrel&amp;nbsp;with&amp;nbsp;sb&amp;nbsp;&amp;nbsp; &lt;br /&gt;struggle&amp;nbsp;with&amp;nbsp;sb&amp;nbsp;&amp;nbsp; &lt;br /&gt;fight&amp;nbsp;with&amp;nbsp;sb&amp;nbsp;&amp;nbsp; &lt;br /&gt;play&amp;nbsp;with&amp;nbsp;sb&amp;nbsp;&amp;nbsp; &lt;br /&gt;work&amp;nbsp;with&amp;nbsp;sb&amp;nbsp;&amp;nbsp; &lt;br /&gt;cooperate&amp;nbsp;with&amp;nbsp;sb&amp;nbsp;&amp;nbsp; &lt;br /&gt;I&amp;nbsp;have&amp;nbsp;been&amp;nbsp;friends&amp;nbsp;with&amp;nbsp;Tom&amp;nbsp;for&amp;nbsp;ten&amp;nbsp;years&amp;nbsp;since&amp;nbsp;we&amp;nbsp;worked&amp;nbsp;with&amp;nbsp;each&amp;nbsp;other&amp;nbsp;,&amp;nbsp;and&amp;nbsp;I&amp;nbsp;have&amp;nbsp;never&amp;nbsp;quarreled&amp;nbsp;with&amp;nbsp;him&amp;nbsp;.&amp;nbsp;&amp;nbsp; &lt;br /&gt;自从我们一起工作以来，我和汤母已经是十年的朋友了，但我们从没有吵过架。&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;br /&gt;四、with&amp;nbsp;表原因或理由&amp;nbsp;&amp;nbsp; &lt;br /&gt;John&amp;nbsp;was&amp;nbsp;in&amp;nbsp;bed&amp;nbsp;with&amp;nbsp;high&amp;nbsp;fever&amp;nbsp;.&amp;nbsp;&amp;nbsp; &lt;br /&gt;约翰因发烧卧床。&amp;nbsp;&amp;nbsp; &lt;br /&gt;He&amp;nbsp;jumped&amp;nbsp;up&amp;nbsp;with&amp;nbsp;joy&amp;nbsp;.&amp;nbsp;&amp;nbsp; &lt;br /&gt;他因高兴跳起来。&amp;nbsp;&amp;nbsp; &lt;br /&gt;Father&amp;nbsp;is&amp;nbsp;often&amp;nbsp;excited&amp;nbsp;with&amp;nbsp;wine&amp;nbsp;.&amp;nbsp;&amp;nbsp; &lt;br /&gt;父亲常因白酒变的兴奋。&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;br /&gt;五、with&amp;nbsp;表&amp;#8220;带来&amp;#8221;，或&amp;#8220;带有,具有&amp;#8221;，在&amp;#8230;身上，在&amp;#8230;身边之意&amp;nbsp;&amp;nbsp; &lt;br /&gt;The&amp;nbsp;girl&amp;nbsp;with&amp;nbsp;golden&amp;nbsp;hair&amp;nbsp;looks&amp;nbsp;beautiful&amp;nbsp;.&amp;nbsp;&amp;nbsp; &lt;br /&gt;那个金头发的女孩看起来漂亮。&amp;nbsp;&amp;nbsp; &lt;br /&gt;The&amp;nbsp;famous&amp;nbsp;director&amp;nbsp;will&amp;nbsp;come&amp;nbsp;to&amp;nbsp;the&amp;nbsp;meeting&amp;nbsp;with&amp;nbsp;the&amp;nbsp;leading&amp;nbsp;actor&amp;nbsp;and&amp;nbsp;actress&amp;nbsp;.&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;那个有名的导演将带着男女主角来到会场。&amp;nbsp;&amp;nbsp; &lt;br /&gt;A&amp;nbsp;storm&amp;nbsp;with&amp;nbsp;a&amp;nbsp;hurricane&amp;nbsp;has&amp;nbsp;come&amp;nbsp;onto&amp;nbsp;its&amp;nbsp;way&amp;nbsp;.&amp;nbsp;&amp;nbsp; &lt;br /&gt;带有飓风的风暴要来了。&amp;nbsp;&amp;nbsp; &lt;br /&gt;Do&amp;nbsp;you&amp;nbsp;have&amp;nbsp;money&amp;nbsp;with&amp;nbsp;you&amp;nbsp;.&amp;nbsp;&amp;nbsp; &lt;br /&gt;身上带着钱吗？&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;Take&amp;nbsp;the&amp;nbsp;umbrella&amp;nbsp;with&amp;nbsp;you&amp;nbsp;in&amp;nbsp;case&amp;nbsp;it&amp;nbsp;rains&amp;nbsp;.&amp;nbsp;&amp;nbsp; &lt;br /&gt;随身带伞，以防下雨。&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;br /&gt;六、with表想法，信念，态度与&amp;#8230;一致&amp;nbsp;&amp;nbsp; &lt;br /&gt;I&amp;nbsp;agree&amp;nbsp;with&amp;nbsp;you&amp;nbsp;on&amp;nbsp;how&amp;nbsp;to&amp;nbsp;deal&amp;nbsp;with&amp;nbsp;it&amp;nbsp;.&amp;nbsp;&amp;nbsp; &lt;br /&gt;关于此事如何处理，我同意你的看法。&amp;nbsp;&amp;nbsp; &lt;br /&gt;I&amp;nbsp;believe&amp;nbsp;with&amp;nbsp;the&amp;nbsp;headmaster&amp;nbsp;that&amp;nbsp;a&amp;nbsp;good&amp;nbsp;teacher&amp;nbsp;should&amp;nbsp;not&amp;nbsp;only&amp;nbsp;teach&amp;nbsp;a&amp;nbsp;student&amp;nbsp;what&amp;nbsp;to&amp;nbsp;learn&amp;nbsp;but&amp;nbsp;also&amp;nbsp;how&amp;nbsp;to&amp;nbsp;learn&amp;nbsp;it&amp;nbsp;.&amp;nbsp;&amp;nbsp; &lt;br /&gt;我相信校长所说，一个好老师不但教学生学什么，而且应教学生怎么去学。&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;br /&gt;七、with表示让步,&amp;#8220;虽有,尽管&amp;#8221;&amp;nbsp;&amp;nbsp; &lt;br /&gt;With&amp;nbsp;all&amp;nbsp;his&amp;nbsp;money&amp;nbsp;and&amp;nbsp;fame,&amp;nbsp;he&amp;nbsp;is&amp;nbsp;not&amp;nbsp;happy&amp;nbsp;.&amp;nbsp;&amp;nbsp; &lt;br /&gt;有着钱和名誉，他还是不快乐。&amp;nbsp;&amp;nbsp; &lt;br /&gt;With&amp;nbsp;good&amp;nbsp;teachers&amp;nbsp;and&amp;nbsp;warmhearted&amp;nbsp;classmates&amp;nbsp;,the&amp;nbsp;new&amp;nbsp;comer&amp;nbsp;feels&amp;nbsp;lonely&amp;nbsp;.&amp;nbsp;&amp;nbsp; &lt;br /&gt;虽有着好老师和热心的同学，这个新来的还是感觉孤独。&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;br /&gt;八、with表同时，或同一方向，&amp;#8220;随着&amp;#8221;&amp;nbsp;&amp;nbsp; &lt;br /&gt;The&amp;nbsp;temperature&amp;nbsp;of&amp;nbsp;cold-blooded&amp;nbsp;animals&amp;nbsp;change&amp;nbsp;with&amp;nbsp;the&amp;nbsp;temperature&amp;nbsp;of&amp;nbsp;the&amp;nbsp;surroundings&amp;nbsp;.&amp;nbsp;&amp;nbsp; &lt;br /&gt;冷血动物的体温随着周围的环境的改变而变化。&amp;nbsp;&amp;nbsp; &lt;br /&gt;The&amp;nbsp;big&amp;nbsp;ship&amp;nbsp;is&amp;nbsp;sailing&amp;nbsp;with&amp;nbsp;the&amp;nbsp;wind&amp;nbsp;.&amp;nbsp;&amp;nbsp; &lt;br /&gt;这个大船正随风向航行。&amp;nbsp;&amp;nbsp; &lt;br /&gt;And&amp;nbsp;with&amp;nbsp;the&amp;nbsp;last&amp;nbsp;words&amp;nbsp;,&amp;nbsp;she&amp;nbsp;turned&amp;nbsp;away.&amp;nbsp;&amp;nbsp; &lt;br /&gt;随着最后一句话说完，他转身离开了。&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;br /&gt;九、with的复合结构表行为方式或伴随情况&amp;nbsp;&amp;nbsp; &lt;br /&gt;1、&amp;nbsp;with&amp;nbsp;+&amp;nbsp;n/pron&amp;nbsp;+&amp;nbsp;adj.&amp;nbsp;&amp;nbsp; &lt;br /&gt;He&amp;nbsp;left&amp;nbsp;the&amp;nbsp;room&amp;nbsp;with&amp;nbsp;the&amp;nbsp;door&amp;nbsp;open&amp;nbsp;.&amp;nbsp;&amp;nbsp; &lt;br /&gt;门开着，他就离开了屋子。&amp;nbsp;&amp;nbsp; &lt;br /&gt;Don&amp;#8217;t&amp;nbsp;talk&amp;nbsp;with&amp;nbsp;your&amp;nbsp;mouse&amp;nbsp;full&amp;nbsp;.&amp;nbsp;&amp;nbsp; &lt;br /&gt;嘴里满是东西，不要说话。&amp;nbsp;&amp;nbsp; &lt;br /&gt;2、with&amp;nbsp;+&amp;nbsp;n/pron&amp;nbsp;+&amp;nbsp;adv.&amp;nbsp;&amp;nbsp; &lt;br /&gt;With&amp;nbsp;the&amp;nbsp;radio&amp;nbsp;on&amp;nbsp;,grandma&amp;nbsp;slept&amp;nbsp;deeply&amp;nbsp;in&amp;nbsp;the&amp;nbsp;chair&amp;nbsp;.&amp;nbsp;&amp;nbsp; &lt;br /&gt;收音机开者，奶奶在椅子里沉沉的睡着。&amp;nbsp;&amp;nbsp; &lt;br /&gt;With&amp;nbsp;Tom&amp;nbsp;away&amp;nbsp;,&amp;nbsp;I&amp;nbsp;always&amp;nbsp;feel&amp;nbsp;lonely&amp;nbsp;.&amp;nbsp;&amp;nbsp; &lt;br /&gt;汤母不在，我一直感觉孤独。&amp;nbsp;&amp;nbsp; &lt;br /&gt;3、with&amp;nbsp;+&amp;nbsp;n/pron&amp;nbsp;+&amp;nbsp;done&amp;nbsp;&amp;nbsp; &lt;br /&gt;The&amp;nbsp;fellow&amp;nbsp;stood&amp;nbsp;there&amp;nbsp;with&amp;nbsp;his&amp;nbsp;hands&amp;nbsp;crossed&amp;nbsp;.&amp;nbsp;&amp;nbsp; &lt;br /&gt;这个家伙两手交叉，站在那里。&amp;nbsp;&amp;nbsp; &lt;br /&gt;The&amp;nbsp;peasants&amp;nbsp;have&amp;nbsp;a&amp;nbsp;good&amp;nbsp;harvest&amp;nbsp;with&amp;nbsp;all&amp;nbsp;the&amp;nbsp;crops&amp;nbsp;got&amp;nbsp;in&amp;nbsp;.&amp;nbsp;&amp;nbsp; &lt;br /&gt;庄稼都收割了，农民们有了一个好收成。&amp;nbsp;&amp;nbsp; &lt;br /&gt;4、with&amp;nbsp;+&amp;nbsp;n/pron&amp;nbsp;+&amp;nbsp;to&amp;nbsp;do&amp;nbsp;&amp;nbsp; &lt;br /&gt;With&amp;nbsp;this&amp;nbsp;book&amp;nbsp;to&amp;nbsp;help&amp;nbsp;you&amp;nbsp;,&amp;nbsp;you&amp;nbsp;can&amp;nbsp;finish&amp;nbsp;your&amp;nbsp;work&amp;nbsp;as&amp;nbsp;soon&amp;nbsp;as&amp;nbsp;possible&amp;nbsp;.&amp;nbsp;&amp;nbsp; &lt;br /&gt;有这本书来帮忙，你能尽快完成工作。&amp;nbsp;&amp;nbsp; &lt;br /&gt;With&amp;nbsp;so&amp;nbsp;many&amp;nbsp;problems&amp;nbsp;to&amp;nbsp;settle&amp;nbsp;,the&amp;nbsp;new&amp;nbsp;manager&amp;nbsp;was&amp;nbsp;too&amp;nbsp;worried&amp;nbsp;to&amp;nbsp;eat&amp;nbsp;anything&amp;nbsp;.&amp;nbsp;&amp;nbsp; &lt;br /&gt;有着太多问题去处理，新经理担忧的吃不下任何东西。&amp;nbsp;&amp;nbsp; &lt;br /&gt;5、with&amp;nbsp;+&amp;nbsp;n/pron&amp;nbsp;+&amp;nbsp;n&amp;nbsp;&amp;nbsp; &lt;br /&gt;The&amp;nbsp;old&amp;nbsp;man&amp;nbsp;looks&amp;nbsp;down&amp;nbsp;upon&amp;nbsp;everyone&amp;nbsp;,with&amp;nbsp;his&amp;nbsp;son&amp;nbsp;chairman&amp;nbsp;of&amp;nbsp;the&amp;nbsp;伴company&amp;nbsp;.&amp;nbsp;&amp;nbsp; &lt;br /&gt;因为他儿子是公司的主席，这个老头瞧不起任何人。&amp;nbsp;&amp;nbsp; &lt;br /&gt;He&amp;nbsp;was&amp;nbsp;taken&amp;nbsp;to&amp;nbsp;hospital&amp;nbsp;with&amp;nbsp;his&amp;nbsp;legs&amp;nbsp;a&amp;nbsp;mass&amp;nbsp;of&amp;nbsp;bleeding&amp;nbsp;flesh&amp;nbsp;.&amp;nbsp;&amp;nbsp; &lt;br /&gt;他被抬到医院，他的腿血肉模糊。&amp;nbsp;&amp;nbsp; &lt;br /&gt;6、with&amp;nbsp;+&amp;nbsp;n/pron&amp;nbsp;+&amp;nbsp;介词短语&amp;nbsp;&amp;nbsp; &lt;br /&gt;The&amp;nbsp;man&amp;nbsp;left&amp;nbsp;the&amp;nbsp;meeting&amp;nbsp;with&amp;nbsp;a&amp;nbsp;book&amp;nbsp;in&amp;nbsp;his&amp;nbsp;hand&amp;nbsp;.&amp;nbsp;&amp;nbsp; &lt;br /&gt;这个男人手里拿着书离开了会议。&amp;nbsp;&amp;nbsp; &lt;br /&gt;The&amp;nbsp;woman&amp;nbsp;with&amp;nbsp;a&amp;nbsp;diamond&amp;nbsp;necklace&amp;nbsp;around&amp;nbsp;the&amp;nbsp;neck&amp;nbsp;must&amp;nbsp;be&amp;nbsp;wealthy&amp;nbsp;.&amp;nbsp;&amp;nbsp; &lt;br /&gt;那个脖子上带项链的女人一定很有钱。&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;br /&gt;十、with其他用法主要出现在一些常用词和习语中，记住其特定含义即可。&amp;nbsp;&amp;nbsp; &lt;br /&gt;It&amp;nbsp;is&amp;nbsp;a&amp;nbsp;long&amp;nbsp;time&amp;nbsp;not&amp;nbsp;to&amp;nbsp;get&amp;nbsp;in&amp;nbsp;touch&amp;nbsp;with&amp;nbsp;Tom.&amp;nbsp;&amp;nbsp; &lt;br /&gt;很长时间没有和汤母取得联系了。&amp;nbsp;&amp;nbsp; &lt;br /&gt;Down&amp;nbsp;with&amp;nbsp;imperialism.&amp;nbsp;&amp;nbsp; &lt;br /&gt;打倒帝国主义。 &lt;font color="#f5fdff"&gt;来_&lt;/font&gt;&lt;img src="http://www.cnblogs.com/wqj1212/aggbug/2248318.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/wqj1212/archive/2011/11/14/2248318.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/wqj1212/archive/2011/11/07/2240323.html</id><title type="text">学习C# delegate和C# event</title><summary type="text">delegate是C#中的一种类型，C# event的处理实际上是一种具有特殊签名的delegate，本文就介绍了C# delegate和C# event。AD： 在基于Windows平台的程序设计中，事件（event）是一个很重要的概念。因为在几乎所有的Windows应用程序中，都会涉及大量的异步调用，比如响应点击按钮、处理Windows系统消息等，这些异步调用都需要通过事件的方式来完成。即使在下一代开发平台——.NET中也不例外。那么什么是事件呢？所谓事件，就是由某个对象发出的消息，这个消息标志着某个特定的行为发生了，或者某个特定的条件成立了。比如用户点击了鼠标、socket上有数据到达等</summary><published>2011-11-07T13:27:00Z</published><updated>2011-11-07T13:27:00Z</updated><author><name>wqj1212</name><uri>http://www.cnblogs.com/wqj1212/</uri></author><link rel="alternate" href="http://www.cnblogs.com/wqj1212/archive/2011/11/07/2240323.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/wqj1212/archive/2011/11/07/2240323.html"/><content type="html">&lt;div &gt;&#xD;
&lt;p &gt;delegate是C#中的一种类型，C# event的处理实际上是一种具有特殊签名的delegate，本文就介绍了C# delegate和C# event。&lt;/p&gt;&#xD;
&lt;p &gt;AD： &lt;/p&gt;&lt;/div&gt;&#xD;
&lt;div style="display: none" id="indexlist" &gt;&#xD;
&lt;ul id="indexliststr"&gt;&lt;/ul&gt;&lt;br  /&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;div id="content"&gt;&#xD;
&lt;p&gt;&lt;p&gt;在基于Windows平台的程序设计中，事件（event）是一个很重要的概念。因为在几乎所有的Windows应用程序中，都会涉及大量的异步调用，比如响应点击按钮、处理Windows系统消息等，这些异步调用都需要通过事件的方式来完成。即使在下一代开发平台&amp;#8212;&amp;#8212;.NET中也不例外。&lt;/p&gt;&#xD;
&lt;p&gt;那么什么是事件呢？所谓事件，就是由某个对象发出的消息，这个消息标志着某个特定的行为发生了，或者某个特定的条件成立了。比如用户点击了鼠标、socket上有数据到达等。那个触发（raise）事件的对象称为事件的发送者（event sender），捕获并响应事件的对象称为事件的接收者（event receiver）。&lt;/p&gt;&#xD;
&lt;p&gt;在这里，我们将要讨论的是，在.NET的主流开发语言C#中如何使用自定义的事件来实现我们自己的异步调用。&lt;/p&gt;&#xD;
&lt;p&gt;在C#中，事件的实现依赖于delegate，因此我们有必要先了解一下delegate的概念。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;C# Delegate&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;delegate是C#中的一种类型，它实际上是一个能够持有对某个方法的引用的类。与其它的类不同，delegate类能够拥有一个签名（signature），并且它只能持有与它的签名相匹配的方法的引用。它所实现的功能与C/C++中的函数指针十分相似。它允许你传递一个类A的方法m给另一个类B的对象，使得类B的对象能够调用这个方法m。但与函数指针相比，delegate有许多函数指针不具备的优点。首先，函数指针只能指向静态函数，而delegate既可以引用静态函数，又可以引用非静态成员函数。在引用非静态成员函数时，delegate不但保存了对此函数入口指针的引用，而且还保存了调用此函数的类实例的引用。其次，与函数指针相比，delegate是面向对象、类型安全、可靠的受控（managed）对象。也就是说，runtime能够保证delegate指向一个有效的方法，你无须担心delegate会指向无效地址或者越界地址。&lt;/p&gt;&#xD;
&lt;p&gt;实现一个C# delegate是很简单的，通过以下3个步骤即可实现一个delegate：&lt;/p&gt;&#xD;
&lt;p&gt;1． 声明一个delegate对象，它应当与你想要传递的方法具有相同的参数和返回值类型。&lt;/p&gt;&#xD;
&lt;p&gt;2． 创建delegate对象，并将你想要传递的函数作为参数传入。&lt;/p&gt;&#xD;
&lt;p&gt;3． 在要实现异步调用的地方，通过上一步创建的对象来调用方法。&lt;/p&gt;&#xD;
&lt;p&gt;下面是一个简单的例子：&lt;/p&gt;&lt;pre&gt;&lt;ol &gt;&lt;li &gt;&lt;span &gt;&lt;strong&gt;&lt;font color="#006699"&gt;using&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;System; &amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;/span&gt;&lt;span &gt;&lt;strong&gt;&lt;font color="#006699"&gt;public&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span &gt;&lt;strong&gt;&lt;font color="#006699"&gt;class&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;MyDelegateTest &amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li &gt;&lt;span&gt;{ &amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;/span&gt;&lt;span &gt;&lt;font color="#008200"&gt;//&amp;nbsp;步骤1，声明delegate对象 &lt;/font&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li &gt;&lt;span&gt;&lt;/span&gt;&lt;span &gt;&lt;strong&gt;&lt;font color="#006699"&gt;public&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span &gt;&lt;strong&gt;&lt;font color="#006699"&gt;delegate&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span &gt;&lt;strong&gt;&lt;font color="#006699"&gt;void&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;MyDelegate(&lt;/span&gt;&lt;span &gt;&lt;strong&gt;&lt;font color="#006699"&gt;string&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;name); &amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;/span&gt;&lt;span &gt;&lt;font color="#008200"&gt;//&amp;nbsp;这是我们欲传递的方法，它与MyDelegate具有相同的参数和返回值类型 &lt;/font&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li &gt;&lt;span&gt;&lt;/span&gt;&lt;span &gt;&lt;strong&gt;&lt;font color="#006699"&gt;public&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span &gt;&lt;strong&gt;&lt;font color="#006699"&gt;static&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span &gt;&lt;strong&gt;&lt;font color="#006699"&gt;void&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;MyDelegateFunc(&lt;/span&gt;&lt;span &gt;&lt;strong&gt;&lt;font color="#006699"&gt;string&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;name) &amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;{ &amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li &gt;&lt;span&gt;Console.WriteLine(&lt;/span&gt;&lt;span &gt;&lt;font color="#0000ff"&gt;"Hello,&amp;nbsp;{0}"&lt;/font&gt;&lt;/span&gt;&lt;span&gt;,&amp;nbsp;name); &amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;} &amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li &gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;/span&gt;&lt;span &gt;&lt;strong&gt;&lt;font color="#006699"&gt;public&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span &gt;&lt;strong&gt;&lt;font color="#006699"&gt;static&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span &gt;&lt;strong&gt;&lt;font color="#006699"&gt;void&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;Main() &amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li &gt;&lt;span&gt;{ &amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;/span&gt;&lt;span &gt;&lt;font color="#008200"&gt;//&amp;nbsp;步骤2，创建delegate对象 &lt;/font&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li &gt;&lt;span&gt;MyDelegate&amp;nbsp;md&amp;nbsp;=&amp;nbsp;&lt;/span&gt;&lt;span &gt;&lt;strong&gt;&lt;font color="#006699"&gt;new&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;MyDelegate(MyDelegateTest.MyDelegateFunc); &amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;/span&gt;&lt;span &gt;&lt;font color="#008200"&gt;//&amp;nbsp;步骤3，调用delegate &lt;/font&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li &gt;&lt;span&gt;md(&lt;/span&gt;&lt;span &gt;&lt;font color="#0000ff"&gt;"sam1111"&lt;/font&gt;&lt;/span&gt;&lt;span&gt;); &amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;} &amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li &gt;&lt;span&gt;}&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/pre&gt;&#xD;
&lt;p&gt;输出结果是：Hello, sam1111&lt;/p&gt;&#xD;
&lt;p&gt;了解了delegate，下面我们来看看，在C#中对event是如何处理的。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;C# event&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;C#中的事件处理实际上是一种具有特殊签名的delegate，象下面这个样子：&lt;/p&gt;&#xD;
&lt;p&gt;public delegate void MyEventHandler(object sender, MyEventArgs e);&lt;/p&gt;&#xD;
&lt;p&gt;其中的两个参数，sender代表事件发送者，e是事件参数类。MyEventArgs类用来包含与事件相关的数据，所有的事件参数类都必须从System.EventArgs类派生。当然，如果你的事件不含参数，那么可以直接用System.EventArgs类作为参数。&lt;/p&gt;&#xD;
&lt;p&gt;就是这么简单，结合delegate的实现，我们可以将自定义事件的实现归结为以下几步：&lt;/p&gt;&#xD;
&lt;p&gt;1． 定义delegate对象类型，它有两个参数，第一个参数是事件发送者对象，第二个参数是事件参数类对象。&lt;/p&gt;&#xD;
&lt;p&gt;2． 定义事件参数类，此类应当从System.EventArgs类派生。如果事件不带参数，这一步可以省略。&lt;/p&gt;&#xD;
&lt;p&gt;3． 定义事件处理方法，它应当与delegate对象具有相同的参数和返回值类型。&lt;/p&gt;&#xD;
&lt;p&gt;4． 用C# event关键字定义事件对象，它同时也是一个delegate对象。&lt;/p&gt;&#xD;
&lt;p&gt;5． 用+=操作符添加事件到事件队列中（-=操作符能够将事件从队列中删除）。&lt;/p&gt;&#xD;
&lt;p&gt;6． 在需要触发事件的地方用调用delegate的方式写事件触发方法。一般来说，此方法应为protected访问限制，既不能以public方式调用，但可以被子类继承。名字是OnEventName。&lt;/p&gt;&#xD;
&lt;p&gt;7． 在适当的地方调用事件触发方法触发事件。&lt;/p&gt;&#xD;
&lt;p&gt;下面是一个简单的例子：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&lt;pre&gt;&lt;ol &gt;&lt;li &gt;&lt;span &gt;&lt;strong&gt;&lt;font color="#006699"&gt;using&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;System; &amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;/span&gt;&lt;span &gt;&lt;strong&gt;&lt;font color="#006699"&gt;public&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span &gt;&lt;strong&gt;&lt;font color="#006699"&gt;class&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;EventTest &amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li &gt;&lt;span&gt;{ &amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;/span&gt;&lt;span &gt;&lt;font color="#008200"&gt;//&amp;nbsp;步骤1，定义delegate对象 &lt;/font&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li &gt;&lt;span&gt;&lt;/span&gt;&lt;span &gt;&lt;strong&gt;&lt;font color="#006699"&gt;public&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span &gt;&lt;strong&gt;&lt;font color="#006699"&gt;delegate&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span &gt;&lt;strong&gt;&lt;font color="#006699"&gt;void&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;MyEventHandler(&lt;/span&gt;&lt;span &gt;&lt;strong&gt;&lt;font color="#006699"&gt;object&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;sender,&amp;nbsp;System.EventArgs&amp;nbsp;e); &amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;/span&gt;&lt;span &gt;&lt;font color="#008200"&gt;//&amp;nbsp;步骤2省略 &lt;/font&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li &gt;&lt;span&gt;&lt;/span&gt;&lt;span &gt;&lt;strong&gt;&lt;font color="#006699"&gt;public&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span &gt;&lt;strong&gt;&lt;font color="#006699"&gt;class&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;MyEventCls &amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;{ &amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li &gt;&lt;span&gt;&lt;/span&gt;&lt;span &gt;&lt;font color="#008200"&gt;//&amp;nbsp;步骤3，定义事件处理方法，它与delegate对象具有相同的参数和返回值类型 &lt;/font&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;/span&gt;&lt;span &gt;&lt;strong&gt;&lt;font color="#006699"&gt;public&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span &gt;&lt;strong&gt;&lt;font color="#006699"&gt;void&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;MyEventFunc(&lt;/span&gt;&lt;span &gt;&lt;strong&gt;&lt;font color="#006699"&gt;object&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;sender,&amp;nbsp;System.EventArgs&amp;nbsp;e) &amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li &gt;&lt;span&gt;{ &amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;Console.WriteLine(&lt;/span&gt;&lt;span &gt;&lt;font color="#0000ff"&gt;"My&amp;nbsp;event&amp;nbsp;is&amp;nbsp;ok!"&lt;/font&gt;&lt;/span&gt;&lt;span&gt;); &amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li &gt;&lt;span&gt;} &amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;} &amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li &gt;&lt;span&gt;&lt;/span&gt;&lt;span &gt;&lt;font color="#008200"&gt;//&amp;nbsp;步骤4，用event关键字定义事件对象 &lt;/font&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;/span&gt;&lt;span &gt;&lt;strong&gt;&lt;font color="#006699"&gt;private&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span &gt;&lt;strong&gt;&lt;font color="#006699"&gt;event&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;MyEventHandler&amp;nbsp;myevent; &amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li &gt;&lt;span&gt;&lt;/span&gt;&lt;span &gt;&lt;strong&gt;&lt;font color="#006699"&gt;private&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;MyEventCls&amp;nbsp;myecls; &amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;/span&gt;&lt;span &gt;&lt;strong&gt;&lt;font color="#006699"&gt;public&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;EventTest() &amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li &gt;&lt;span&gt;{ &amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;myecls&amp;nbsp;=&amp;nbsp;&lt;/span&gt;&lt;span &gt;&lt;strong&gt;&lt;font color="#006699"&gt;new&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;MyEventCls(); &amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li &gt;&lt;span&gt;&lt;/span&gt;&lt;span &gt;&lt;font color="#008200"&gt;//&amp;nbsp;步骤5，用+=操作符将事件添加到队列中 &lt;/font&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;/span&gt;&lt;span &gt;&lt;strong&gt;&lt;font color="#006699"&gt;this&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span&gt;.myevent&amp;nbsp;+=&amp;nbsp;&lt;/span&gt;&lt;span &gt;&lt;strong&gt;&lt;font color="#006699"&gt;new&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;MyEventHandler(myecls.MyEventFunc); &amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li &gt;&lt;span&gt;} &amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;/span&gt;&lt;span &gt;&lt;font color="#008200"&gt;//&amp;nbsp;步骤6，以调用delegate的方式写事件触发函数 &lt;/font&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li &gt;&lt;span&gt;&lt;/span&gt;&lt;span &gt;&lt;strong&gt;&lt;font color="#006699"&gt;protected&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span &gt;&lt;strong&gt;&lt;font color="#006699"&gt;void&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;OnMyEvent(System.EventArgs&amp;nbsp;e) &amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;{ &amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li &gt;&lt;span&gt;&lt;/span&gt;&lt;span &gt;&lt;strong&gt;&lt;font color="#006699"&gt;if&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span&gt;(myevent&amp;nbsp;!=&amp;nbsp;&lt;/span&gt;&lt;span &gt;&lt;strong&gt;&lt;font color="#006699"&gt;null&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span&gt;) &amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;myevent(&lt;/span&gt;&lt;span &gt;&lt;strong&gt;&lt;font color="#006699"&gt;this&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span&gt;,&amp;nbsp;e); &amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li &gt;&lt;span&gt;} &amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li &gt;&lt;span&gt;&lt;/span&gt;&lt;span &gt;&lt;strong&gt;&lt;font color="#006699"&gt;public&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span &gt;&lt;strong&gt;&lt;font color="#006699"&gt;void&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;RaiseEvent() &amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;{ &amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li &gt;&lt;span&gt;EventArgs&amp;nbsp;e&amp;nbsp;=&amp;nbsp;&lt;/span&gt;&lt;span &gt;&lt;strong&gt;&lt;font color="#006699"&gt;new&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;EventArgs(); &amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;/span&gt;&lt;span &gt;&lt;font color="#008200"&gt;//&amp;nbsp;步骤7，触发事件 &lt;/font&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li &gt;&lt;span&gt;OnMyEvent(e); &amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;} &amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li &gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;/span&gt;&lt;span &gt;&lt;strong&gt;&lt;font color="#006699"&gt;public&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span &gt;&lt;strong&gt;&lt;font color="#006699"&gt;static&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span &gt;&lt;strong&gt;&lt;font color="#006699"&gt;void&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;Main() &amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li &gt;&lt;span&gt;{ &amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;EventTest&amp;nbsp;et&amp;nbsp;=&amp;nbsp;&lt;/span&gt;&lt;span &gt;&lt;strong&gt;&lt;font color="#006699"&gt;new&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;EventTest(); &amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li &gt;&lt;span&gt;Console.Write(&lt;/span&gt;&lt;span &gt;&lt;font color="#0000ff"&gt;"Please&amp;nbsp;input&amp;nbsp;a:"&lt;/font&gt;&lt;/span&gt;&lt;span&gt;); &amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;/span&gt;&lt;span &gt;&lt;strong&gt;&lt;font color="#006699"&gt;string&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;s&amp;nbsp;=&amp;nbsp;Console.ReadLine(); &amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li &gt;&lt;span&gt;&lt;/span&gt;&lt;span &gt;&lt;strong&gt;&lt;font color="#006699"&gt;if&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span&gt;(s&amp;nbsp;==&amp;nbsp;&lt;/span&gt;&lt;span &gt;&lt;font color="#0000ff"&gt;"a"&lt;/font&gt;&lt;/span&gt;&lt;span&gt;) &amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;{ &amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li &gt;&lt;span&gt;et.RaiseEvent(); &amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;} &amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li &gt;&lt;span&gt;&lt;/span&gt;&lt;span &gt;&lt;strong&gt;&lt;font color="#006699"&gt;else&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;{ &amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li &gt;&lt;span&gt;Console.WriteLine(&lt;/span&gt;&lt;span &gt;&lt;font color="#0000ff"&gt;"Error"&lt;/font&gt;&lt;/span&gt;&lt;span&gt;); &amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;} &amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li &gt;&lt;span&gt;} &amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;}&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/pre&gt;&#xD;
&lt;p&gt;输出结果如下，黑体为用户的输入：&lt;/p&gt;&#xD;
&lt;p&gt;Please input &amp;#8216;a&amp;#8217;: a&lt;/p&gt;&#xD;
&lt;p&gt;My event is ok!&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;小结&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;通过上面的讨论，我们大体上明白了C# delegate和C# event的概念，以及如何在C#中使用它们。我个人认为，delegate在C#中是一个相当重要的概念，合理运用的话，可以使一些相当复杂的问题变得很简单。有时我甚至觉得，delegate甚至能够有指针的效果，除了不能直接访问物理地址。而且事件也是完全基于delegate来实现的。由于能力有限，本文只是对delegate和event的应用作了一个浅显的讨论，并不深入，我希望本文能够起到抛砖引玉的作用。真正想要对这两个概念有更深入的了解的话，还是推荐大家看MSDN。&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/wqj1212/aggbug/2240323.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/wqj1212/archive/2011/11/07/2240323.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/wqj1212/archive/2011/10/14/2212318.html</id><title type="text">（转）直方图反向投影</title><summary type="text">OpenCV统计应用-直方图反向投影影像处理的统计直方图,可以知道一张图片在该色彩空间的数据分布状况,而这边,就要介绍到直方图反向投影的函式,直方图反向投影,也就是将数据分布的状况依照Look-up table的方式对应回去,实际上,这个函式是跟前面介绍到的cvLUT()是一样的,只不过,差别是差异在cvLUT()的第三个自变量改变成CvHistogram数据结构的输入,直方图反向投影,cvCalcBackProject()的第一个自变量是输入单信道IplImage数据结构,第二个自变量是输出单信道IplImage反向投影图形数据结构,第三个自变量是选定要被反向投影的CvHistogram直方</summary><published>2011-10-14T08:01:00Z</published><updated>2011-10-14T08:01:00Z</updated><author><name>wqj1212</name><uri>http://www.cnblogs.com/wqj1212/</uri></author><link rel="alternate" href="http://www.cnblogs.com/wqj1212/archive/2011/10/14/2212318.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/wqj1212/archive/2011/10/14/2212318.html"/><content type="html">&lt;p&gt;OpenCV统计应用-直方图反向投影&lt;br /&gt;影像处理的统计直方图,可以知道一张图片在该色彩空间的数据分布状况,而这边,就要介绍到直方图反向投影的函式,直方图反向投影,也就是将数据分布的状况依照Look-up table的方式对应回去,实际上,这个函式是跟前面介绍到的cvLUT()是一样的,只不过,差别是差异在cvLUT()的第三个自变量改变成CvHistogram数据结构的输入,直方图反向投影,cvCalcBackProject()的第一个自变量是输入单信道IplImage数据结构,第二个自变量是输出单信道IplImage反向投影图形数据结构,第三个自变量是选定要被反向投影的CvHistogram直方图数据结构,而cvCalcBackProject()把前面提到的Look-up table的计算方式包在cvCalcBackProject()函式的底层,因此,它可以整合CvHistogram这个数据结构做更多的应用,下面这个就是修改前面的范例"OpenCV统计应用-CvHistogram直方图数据结构",来做直方图反向投影的程序&lt;/p&gt;&#xD;
&lt;p&gt;灰阶直方图反向投影&lt;br /&gt;#include &amp;lt;cv.h&amp;gt;&lt;br /&gt;#include &amp;lt;highgui.h&amp;gt;&lt;br /&gt;#include &amp;lt;stdio.h&amp;gt;&lt;/p&gt;&#xD;
&lt;p&gt;int HistogramBins = 50;&lt;br /&gt;int HistogramBinWidth;&lt;br /&gt;float HistogramRange1[2]={0,255};&lt;br /&gt;float *HistogramRange[1]={&amp;amp;HistogramRange1[0]};&lt;/p&gt;&#xD;
&lt;p&gt;CvPoint Point1;&lt;br /&gt;CvPoint Point2;&lt;/p&gt;&#xD;
&lt;p&gt;int main()&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; IplImage *GrayImage1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; IplImage *Image1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; IplImage *Image2;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; IplImage *BackProjectImage;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CvHistogram *Histogram1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; IplImage *HistogramImage1;&lt;/p&gt;&#xD;
&lt;p&gt;Image1=cvLoadImage("Riverbank.jpg",1);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Image2=cvCreateImage(cvGetSize(Image1),IPL_DEPTH_8U,3);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; GrayImage1=cvLoadImage("Riverbank.jpg",0);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; BackProjectImage=cvCreateImage(cvGetSize(Image1),IPL_DEPTH_8U,1);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Histogram1 = cvCreateHist(1,&amp;amp;HistogramBins,CV_HIST_ARRAY,HistogramRange);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; HistogramImage1 = cvCreateImage(cvSize(256,300),8,3);&lt;/p&gt;&#xD;
&lt;p&gt;cvSetZero(HistogramImage1);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; HistogramImage1-&amp;gt;origin=1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; HistogramBinWidth=256/HistogramBins;&lt;/p&gt;&#xD;
&lt;p&gt;cvCalcHist(&amp;amp;GrayImage1,Histogram1);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cvNormalizeHist(Histogram1,5000);&lt;/p&gt;&#xD;
&lt;p&gt;cvThreshHist(Histogram1,50);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cvCalcBackProject(&amp;amp;GrayImage1,BackProjectImage,Histogram1);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cvCopy(Image1,Image2,BackProjectImage);&lt;/p&gt;&#xD;
&lt;p&gt;for(int i=0;i&amp;lt;HistogramBins;i++)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf("%f/n",cvQueryHistValue_1D(Histogram1,i));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Point1=cvPoint(i*HistogramBinWidth,0);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Point2=cvPoint((i+1)*HistogramBinWidth,(int)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cvQueryHistValue_1D(Histogram1,i));&lt;/p&gt;&#xD;
&lt;p&gt;cvRectangle(HistogramImage1,Point1,Point2,CV_RGB(127,127,127));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;&#xD;
&lt;p&gt;cvNamedWindow("Histogram1",1);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cvNamedWindow("Riverbank",1);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cvNamedWindow("Back Project RiverBank",1);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cvShowImage("Riverbank",Image1);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cvShowImage("Back Project RiverBank",Image2);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cvShowImage("Histogram1",HistogramImage1);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cvWaitKey(0);&lt;br /&gt;}&lt;/p&gt;&#xD;
&lt;p&gt;执行结果:&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;这边就是拿前面灰阶去除较小直方图区块的程序代码做修改,然后将前面去除最小区块的部份,对应到彩色的图片去了,显示的结果会是,只要是影像里面灰阶值分布数量比较少的数据,全部都被对应成黑色的像素,也就是全部都变成0,而cvCalcBackProject(),就跟cvLUT()一样直接拿直方图的数据去对应,假设一个直方图从头开始的数据为254,129,80,70....那么只要是图片内像素值为1的数据就会对应到254,1的图片里面像素值的数据就会直接变成254,像素值为2的就会对应到129,2的数据就会直接变成129,以此类推,因此,用cvThreshHist()去除小于50的直方图区段,让小于50的全部归0,再来,对他做一个图片的反向投影,所对应出来的结果虽然不是0或255,可是它却可以直接拿来当做是屏蔽,也就是说,直接拿来给cvCopy()来做对应,因此,反向投影的结果就出来啦,在屏蔽的部份就要参考"数据结构操作与运算-图形的Mask屏蔽实作",而这段程序代码则是用到"OpenCV统计应用-CvHistogram数据结构操作"里面的部份.&lt;/p&gt;&#xD;
&lt;p&gt;在OpenCV Documentation的部份有提到cvCalcBackProject()可以对HSV色彩空间的Hue做反向投影,到底是怎么实作出来呢？在OpenCV的Sample Code里面有一个camshift.c的程序,就是用到这个反向投影的函式,而它的反向投影的简单范例,原理就如下所示&lt;/p&gt;&#xD;
&lt;p&gt;HSV色彩空间反向投影&lt;br /&gt;#include &amp;lt;cv.h&amp;gt;&lt;br /&gt;#include &amp;lt;highgui.h&amp;gt;&lt;br /&gt;#include &amp;lt;stdio.h&amp;gt;&lt;/p&gt;&#xD;
&lt;p&gt;IplImage *Image1,*Image2;&lt;br /&gt;IplImage *HSVImage;&lt;br /&gt;IplImage *HueImage;&lt;br /&gt;IplImage *BackProjectHueImage,*BackProjectImage;&lt;br /&gt;CvHistogram *Histogram1;&lt;br /&gt;IplImage *HistogramImage1;&lt;br /&gt;CvPoint Point1,Point2;&lt;/p&gt;&#xD;
&lt;p&gt;int HueValue=0;&lt;/p&gt;&#xD;
&lt;p&gt;int HistogramBins = 180;&lt;br /&gt;int HistogramBinWidth;&lt;br /&gt;float HistogramRange1[2]={0,180};&lt;br /&gt;float *HistogramRange[1]={&amp;amp;HistogramRange1[0]};&lt;br /&gt;void onTrackbar(int position);&lt;/p&gt;&#xD;
&lt;p&gt;int main()&lt;br /&gt;{&lt;/p&gt;&#xD;
&lt;p&gt;Image1 =cvLoadImage("Riverbank.jpg",1);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; HSVImage = cvCreateImage( cvGetSize(Image1),8,3);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; HueImage = cvCreateImage( cvGetSize(Image1),8,1);&lt;/p&gt;&#xD;
&lt;p&gt;BackProjectHueImage = cvCreateImage( cvGetSize(Image1),8,1);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; BackProjectImage = cvCreateImage( cvGetSize(Image1),8,3);&lt;/p&gt;&#xD;
&lt;p&gt;Histogram1 = cvCreateHist(1,&amp;amp;HistogramBins,CV_HIST_ARRAY,HistogramRange);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; HistogramImage1 = cvCreateImage(cvSize(180,300),8,3);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; HistogramImage1-&amp;gt;origin=1;&lt;/p&gt;&#xD;
&lt;p&gt;cvCvtColor( Image1, HSVImage, CV_BGR2HSV );&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cvSplit(HSVImage,HueImage,0,0,0);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cvCalcHist( &amp;amp;HueImage, Histogram1);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cvNormalizeHist(Histogram1,5000);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cvZero( HistogramImage1 );&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cvNot(HistogramImage1,HistogramImage1);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; HistogramBinWidth = HistogramImage1-&amp;gt;width/HistogramBins;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for(int i=0;i&amp;lt;HistogramBins;i++)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;&#xD;
&lt;p&gt;Point1=cvPoint(i,0);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Point2=cvPoint(i,(int)cvQueryHistValue_1D(Histogram1,i));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf("%d/n",(int)cvQueryHistValue_1D(Histogram1,i));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cvLine(HistogramImage1,Point1,Point2,CV_RGB(127,127,127));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cvNamedWindow("Riverbank",1 );&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cvNamedWindow("Hue Histogram",1);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cvCreateTrackbar("Hue Thresh","Riverbank",&amp;amp;HueValue,250,onTrackbar);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cvShowImage("Riverbank",Image1);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cvShowImage("Hue Histogram",HistogramImage1);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cvWaitKey(0);&lt;/p&gt;&#xD;
&lt;p&gt;}&lt;/p&gt;&#xD;
&lt;p&gt;void onTrackbar(int position)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; IplImage *Image2=cvCreateImage( cvGetSize(Image1),8,3);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CvHistogram *Histogram2= cvCreateHist(1,&amp;amp;HistogramBins,CV_HIST_ARRAY,HistogramRange);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cvCopyHist(Histogram1,&amp;amp;Histogram2);&lt;/p&gt;&#xD;
&lt;p&gt;cvThreshHist(Histogram2,position);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cvCalcBackProject(&amp;amp;HueImage, BackProjectHueImage, Histogram2);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cvCopy(Image1,Image2,BackProjectHueImage);&lt;/p&gt;&#xD;
&lt;p&gt;cvZero( HistogramImage1 );&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cvNot(HistogramImage1,HistogramImage1);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; HistogramBinWidth = HistogramImage1-&amp;gt;width/HistogramBins;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for(int i=0;i&amp;lt;HistogramBins;i++)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;&#xD;
&lt;p&gt;Point1=cvPoint(i,0);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Point2=cvPoint(i,(int)cvQueryHistValue_1D(Histogram2,i));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf("%d/n",(int)cvQueryHistValue_1D(Histogram2,i));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cvLine(HistogramImage1,Point1,Point2,CV_RGB(127,127,127));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cvShowImage("Hue Histogram",HistogramImage1);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cvShowImage("Riverbank",Image2);&lt;br /&gt;}&lt;/p&gt;&#xD;
&lt;p&gt;执行结果:&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;在OpenCV里面,HSV色彩空间,色调(Hue)值的范围在0~180,饱和度(Saturation)的范围在0~255,亮度(Value)的范围在0~255,而这边就只取色调(Hue)值在做反向投影,开启了一个Track bar的功能,并且利用cvCvtColor()将BGR的色彩空间转换成HSV,并且用cvSplit()信道分割取Hue信道的图片,计算Hue值的直方图,在onTrackbar()的部份,则是用Trackbar来调整去除cvThreshHist()的最小区块的临界值,去除之后在反向投影到原始的Hue的图片,在由反向投影的结果当做屏蔽,直接跟彩色图片做对应.&lt;/p&gt;&#xD;
&lt;p&gt;而cvCalcBackProject()不单单只有这样的功能,它可以对多维度空间的色彩直方图做对应,cvCalcBackProject()提供了一个当CvHistogram数据结构维度为3的时候的一个反向投影,下面的这个例子就以HSV的色彩空间为例,建构一个三维的CvHistogram数据结构&lt;/p&gt;&#xD;
&lt;p&gt;HSV三维直方图反向投影&lt;br /&gt;#include &amp;lt;cv.h&amp;gt;&lt;br /&gt;#include &amp;lt;highgui.h&amp;gt;&lt;br /&gt;#include &amp;lt;stdio.h&amp;gt;&lt;/p&gt;&#xD;
&lt;p&gt;IplImage *Image1,*Image2;&lt;br /&gt;IplImage *HSV;&lt;br /&gt;IplImage *HueImage,*SaturationImage,*ValueImage;&lt;br /&gt;IplImage *ImageArray[3];&lt;br /&gt;IplImage *BackProjectImage;&lt;br /&gt;CvHistogram *Histogram1;&lt;br /&gt;IplImage *HistogramImage1;&lt;br /&gt;CvPoint Point1,Point2;&lt;/p&gt;&#xD;
&lt;p&gt;int HueValue=0;&lt;/p&gt;&#xD;
&lt;p&gt;int HistogramBins[3] ={180,256,256};&lt;br /&gt;int HistogramBinWidth;&lt;br /&gt;float HistogramRange1[6]={0,180,0,255,0,255};&lt;br /&gt;float *HistogramRange[3]={&amp;amp;HistogramRange1[0],&amp;amp;HistogramRange1[2],&amp;amp;HistogramRange1[4]};&lt;br /&gt;void onTrackbar(int position);&lt;/p&gt;&#xD;
&lt;p&gt;int main()&lt;br /&gt;{&lt;/p&gt;&#xD;
&lt;p&gt;Image1 =cvLoadImage("Riverbank.jpg",1);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; HSV = cvCreateImage( cvGetSize(Image1),8,3 );&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; HueImage = cvCreateImage( cvGetSize(Image1),8,1 );&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SaturationImage = cvCreateImage( cvGetSize(Image1),8,1 );&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ValueImage = cvCreateImage( cvGetSize(Image1),8,1);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ImageArray[0]=HueImage;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ImageArray[1]=SaturationImage;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ImageArray[2]=ValueImage;&lt;/p&gt;&#xD;
&lt;p&gt;BackProjectImage = cvCreateImage( cvGetSize(Image1),8,3 );&lt;/p&gt;&#xD;
&lt;p&gt;Histogram1 = cvCreateHist(3,HistogramBins,CV_HIST_SPARSE,HistogramRange);&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cvCvtColor( Image1, HSV, CV_BGR2HSV );&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cvSplit(HSV,HueImage,SaturationImage,ValueImage,0);&lt;/p&gt;&#xD;
&lt;p&gt;cvCalcHist( ImageArray, Histogram1);&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cvNamedWindow("Riverbank",1 );&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cvCreateTrackbar("Hue Thresh","Riverbank",&amp;amp;HueValue,200,onTrackbar);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cvShowImage("Riverbank",Image1);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cvWaitKey(0);&lt;/p&gt;&#xD;
&lt;p&gt;}&lt;/p&gt;&#xD;
&lt;p&gt;void onTrackbar(int position)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CvHistogram *Histogram2= cvCreateHist(3,HistogramBins,CV_HIST_SPARSE,HistogramRange);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; IplImage *Image2=cvCreateImage( cvGetSize(Image1),8,3 );&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; IplImage *BackProjectImage = cvCreateImage( cvGetSize(Image1),8,1 );&lt;/p&gt;&#xD;
&lt;p&gt;cvCopyHist(Histogram1,&amp;amp;Histogram2);&lt;/p&gt;&#xD;
&lt;p&gt;cvThreshHist(Histogram2,position);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cvCalcBackProject( ImageArray, BackProjectImage, Histogram2);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cvCopy(Image1,Image2,BackProjectImage);&lt;/p&gt;&#xD;
&lt;p&gt;cvShowImage("Riverbank",Image2);&lt;br /&gt;}&lt;/p&gt;&#xD;
&lt;p&gt;执行结果:&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;在三维空间的作法上面,就要参考到前面"OpenCV统计应用-CvHistogram直方图数据结构"关于三维空间制作的部份,除了用cvCvtColor()将色彩空间转换,用cvSplit()将信道做分割,还要做个图形数组(ImageArray)来让cvCalcHist()这个函式做运算,计算出来的结果为一个CvHistogram的三维空间稀疏矩阵直方图,而在onTrackbar()的部份,cvCalcBackProject()直方图反向投影亦是同样要用ImageArray做输入,而输出则是一个单信道的图形,在稀疏矩阵里面,由于维度为三维,所以他所形成的统计直方图数值都是极小,所以门坎值只要一点点就快要全部都分布了,而这个三维空间的反向投影可以如此建构,是基于Look-up table的功能来实现,只不过他的缺点是,每一个维度的Look-up table范围是0~255,因此如果是像Hue值的范围0~180,它的数值就会被模糊化,也就是数据会被些许位移,但是仍不会影响它出来结果的精确度&lt;/p&gt;&#xD;
&lt;p&gt;在这个直方图反向投影的部份,也可以结合连通成分来做去除某一门坎值的连通分量&lt;/p&gt;&#xD;
&lt;p&gt;cvCalcBackProject()&lt;br /&gt;将统计直方图的分布数据根据Look-up table对应回去,也就是说,当今天CvHistogram数据结构内的数据分布是243,110,0,60...则使用cvCalcBackProject()函式单信道的图片像素值会是,当遇到像素值为1的时候变243,像素值为2的时候变110,依此类推,cvCalcBackProject()直方图反向投影可以根据多维度设计,而cvCalcBackProject()第一个自变量为输入单信道IplImage或CvMat数据结构,第二个自变量为输入单通道反向投影IplImage或CvMat数据结构,第三个自变量为输入CvHistogram数据结构&lt;br /&gt;cvCalcBackProject(输入单信道IplImage或CvMat数据结构,输入单信道反向投影IplImage或CvMat数据结构,输入CvHistogram数据结构)&lt;/p&gt;&lt;img src="http://www.cnblogs.com/wqj1212/aggbug/2212318.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/wqj1212/archive/2011/10/14/2212318.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/wqj1212/archive/2011/10/11/2207359.html</id><title type="text">Use SolidWorks model in Ogre3D</title><summary type="text">Use SolidWorks model in Ogre3Dhttp://www.ogre3d.org/forums/viewtopic.php?f=8&amp;amp;t=13716&amp;amp;start=0Blender 3D: Noob to Pro/Import and Render a SolidWorks Modelhttp://en.wikibooks.org/wiki/Blender_3D:_Import_and_Render_a_SolidWorks_ModelBlender to Ogrehttp://www.ogre3d.org/tikiwiki/Blender+to+Ogreog</summary><published>2011-10-11T07:29:00Z</published><updated>2011-10-11T07:29:00Z</updated><author><name>wqj1212</name><uri>http://www.cnblogs.com/wqj1212/</uri></author><link rel="alternate" href="http://www.cnblogs.com/wqj1212/archive/2011/10/11/2207359.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/wqj1212/archive/2011/10/11/2207359.html"/><content type="html">&lt;p&gt;Use SolidWorks model in Ogre3D&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://www.ogre3d.org/forums/viewtopic.php?f=8&amp;amp;t=13716&amp;amp;start=0"&gt;http://www.ogre3d.org/forums/viewtopic.php?f=8&amp;amp;t=13716&amp;amp;start=0&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;Blender 3D: Noob to Pro/Import and Render a SolidWorks Model&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://en.wikibooks.org/wiki/Blender_3D:_Import_and_Render_a_SolidWorks_Model"&gt;http://en.wikibooks.org/wiki/Blender_3D:_Import_and_Render_a_SolidWorks_Model&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a  href="http://www.ogre3d.org/tikiwiki/tiki-index.php?page=Blender%20to%20Ogre"&gt;Blender to Ogre&lt;/a&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://www.ogre3d.org/tikiwiki/Blender+to+Ogre"&gt;http://www.ogre3d.org/tikiwiki/Blender+to+Ogre&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;div id="pname"&gt;&lt;a href="http://code.google.com/p/ogre-mesh-viewer/"&gt;&lt;span itemprop="name"&gt;ogre-mesh-viewer&lt;/span&gt;&lt;/a&gt; &lt;/div&gt;&#xD;
&lt;p&gt;&lt;a href="http://code.google.com/p/ogre-mesh-viewer/downloads/detail?name=ogre-mesh-viewer_v0.1.zip&amp;amp;can=2&amp;amp;q"&gt;http://code.google.com/p/ogre-mesh-viewer/downloads/detail?name=ogre-mesh-viewer_v0.1.zip&amp;amp;can=2&amp;amp;q&lt;/a&gt;=&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://code.google.com/p/ogre-mesh-viewer/"&gt;http://code.google.com/p/ogre-mesh-viewer/&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/wqj1212/aggbug/2207359.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/wqj1212/archive/2011/10/11/2207359.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/wqj1212/archive/2011/06/02/2068424.html</id><title type="text">转 技术型 没销售经验 怎么创业</title><summary type="text">对技术人员创业经深入探讨之前，我先介绍一下自己的经历，让大家认识一个真实的从技术工程师到研发管理者，再到创业者的人。从媒体可以认识马云、史玉柱、牛根生很多成功的创业前辈，那一切对我们每一位工程师似乎又很遥远，他们是按照统计学规律，在人群中只有小概率的人才能达到的，但本文所写的这一切，就发生在您的身边，并仍将被许许多多的技术人员继续实践着的技术创业之路的朴实与传奇。我97年电子工程硕士毕业，之后在航天系统工作5年，辗转几个部门，再后来到一个机电设备制造类的创业型企业，做了6年多，随着企业的发展，从一个具体业务方向的项目部经理做到负责研发运营的总监和事业部总监的职位，公司从二、三十人到了五百多，从</summary><published>2011-06-02T05:36:00Z</published><updated>2011-06-02T05:36:00Z</updated><author><name>wqj1212</name><uri>http://www.cnblogs.com/wqj1212/</uri></author><link rel="alternate" href="http://www.cnblogs.com/wqj1212/archive/2011/06/02/2068424.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/wqj1212/archive/2011/06/02/2068424.html"/><content type="html">&lt;div id="app-share-content"&gt;&#xD;
&lt;p&gt;对技术人员创业经深入探讨之前，我先介绍一下自己的经历，让大家认识一个真实的从技术工程师到研发管理者，再到创业者的人。从媒体可以认识马云、史玉柱、牛根生很多成功的创业前辈，那一切对我们每一位工程师似乎又很遥远，他们是按照统计学规律，在人群中只有小概率的人才能达到的，但本文所写的这一切，就发生在您的身边，并仍将被许许多多的技术人员继续实践着的技术创业之路的朴实与传奇。&lt;/p&gt;&#xD;
&lt;p&gt;我97年电子工程硕士毕业，之后在航天系统工作5年，辗转几个部门，再后来到一个机电设备制造类的创业型企业，做了6年多，随着企业的发展，从一个具体业务方向的项目部经理做到负责研发运营的总监和事业部总监的职位，公司从二、三十人到了五百多，从零收入到几个亿，从国内区域客户到全球四十几个国家，然后是我的天花板，下决心走出来开始自己创业。&lt;/p&gt;&#xD;
&lt;p&gt;我也有一些运气和机会，那要感谢前老板，他让我有了一个见识并亲自参与决策、实施使一个企业成长的过程，这个过程中的点点滴滴不是很多人能得到的，包括外企高收入的高级白领们，因为企业不同的阶段会面临不同的问题，会有不同的解决方法，虽然我离开了，虽然不知道和前老板还能不能做成朋友，但我感恩，感恩于6年多的职业生涯给我带来的一切。这是技术人员创业经的第一个理念。如果不感恩，或者不是发自内心的感恩，创业是很难成功的，修身先修心，相随心转，心灵的很多东西会在相貌上体现出来，你的客户、朋友、员工都一定会感觉得到，这会影响他们是否愿意真心诚意的帮你，是否真正的信任你。&lt;/p&gt;&#xD;
&lt;p&gt;创业首要的问题是认识自己，认识自己是否具有商业思维和经营能力，技术人员创业容易走进一个误区，&amp;#8220;我有产品有技术于是去创业，还得说了算，有控制权&amp;#8221;，需要明白一点的是，创业需要战略思维和商业思维，而这不是自己认为有就有的，真正有商业头脑的人就会较容易地感知并发现这类人才，并与之产生共鸣，所以创业酝酿期最好能和一些投资商、创业成功的企业家接触一下，请他们来感知和判断创业者本人究竟是否具有创业特质的人，既然自知之明难做到，那就用他知作参考。一般他们的感觉会是对的，不对的话他们就不太可能成功。为什么这里更多地强调商业思维而不是技术，因为创业的过程会面对很多变数，市场需求是变化的，竞争对手、竞争产品、竞争技术都是随时变化的，关键资源也是变化的，能否成功应对这些变数才是关键的能力，而不是那一点点的技术。&amp;#8220;企业家是资源&amp;#8221;，此言不虚。&lt;/p&gt;&#xD;
&lt;p&gt;比如我见到一位创业的技术型人才，公司初创时，开始时判断会有很好的前景，因为过去隔三差五就有人主动上门找私人帮忙做些设计服务，业务开始后，却突然发现没人上门，自己也还没准备好如何去主动出击让客户知道自己，或自己能主动找到目标客户，这样就没得生意可做；后来还不错，朋友听说后有介绍客户来的，但他签合同时要价很高，首付款比例又太低，对因为客户内部原因不能解决的问题也作甩手掌柜，明知道能帮上忙也不去帮，问起来还有句说辞&amp;#8220;那部分没在我合同之内&amp;#8221;，最后的结果是客户原因合同执行不下去了，不了了之，首付款很小的比例远不能称之为收益，已收首付款额度太低，对客户的压力也不够，后来客户直接找了另一家合作，用此合同的未付余款就把项目做完了还略有节余。这里面他犯了几个错误，一是做生意总觉得价高就好，孰不知回款才是重中之重，没回到款的生意等于没做，尤其是在国内当前还缺乏诚信的商业环境下。二是客户内部是出了点问题，也和合同协议内容无关，但他忽视了别人的问题可能是你来买单的，对于别人的事情，但要你来承担损失的话，还需要计较该谁干吗？三是首付款比例太低也没有对客户的约束力，客户的违约退出成本太低。同样是技术人员，一位从航天出来的技术工程师就很无意地把这些问题都规避了，于是我认为航天这位朋友能做好生意，经过近两年的事实证明，这两位朋友的公司发展迥异，这些商业细节方面他俩有很多的微小差异。这些细节上就体现了一个人的商业思维。&lt;/p&gt;&#xD;
&lt;p&gt;所以说，通过让成功创业的人评判您自己是否具有创业头脑，可以下一个结论，适合创业的话您可以做领导核心，主导创业，如果不适合创业也不必放弃，可以找合作伙伴，心甘情愿的当小弟，贡献你的技术，让有商业头脑的人主导公司战略和运营，自己多听多想，但就是不要太固执了，执着于自己的思维，总觉得自己对，不合我意就撂挑子走人。&lt;/p&gt;&#xD;
&lt;p&gt;确认了自己适合创业后，开始选择创业项目，技术人员的常规思维是我懂某个产品，掌握某项技术，就以它为方向，这个思路本身是没问题的，但是不全面，创业首要的是做市场细分，研究商业模式，把东西卖给谁，他要什么样的东西，他为什么非要买你家的而不是买别人家的同类产品，最常见的分析是&amp;#8220;这东西都是进口的，我做出来便宜，一定可以替代它们的&amp;#8221;、&amp;#8220;我做的这东西还没有人做，市场空间广阔得很&amp;#8221;，忽视了一点，假设您个人做出了一款手机，拿来卖给我，说怎么便宜怎么好，我现在一定不会买，我不相信产品的质量。没人做的东西有几种可能，需求还没起来，那么就要培育需求改变用户的应用习惯，它是一个很漫长的过程，销售的商品里面除了产品本身还有一个品牌价值在里面，切不可低估了品牌价值的影响；还有可能有需求，但这里面有本质问题，没盈利就不能维持公司运转，或者有投资也行，但投资也不是一直投下去的，它也是为了快速高额回报而投的，博客中国最近的欠薪和倒闭就是个很好的例证。&lt;/p&gt;&#xD;
&lt;p&gt;创业前的项目选择有几点：一是不熟不做，不熟悉的东西看起来再美好，那也是因为我们只发现了其优点，还没有发现其缺点。而创业最大的风险绝不在于是没有前景，而是在于风险会使我们失败，做熟悉的就能相对比较好的预见并规避风险；可以做自己熟悉而且能做的产品或服务，与原来的企业直接竞争或补充其未切入的市场空间，例如我是监控系统开发工程师，创业可以去做个家庭监控或设备监控，弥补原来企业的市场未覆盖到的区域；二是以自己熟悉的为目标客户，还是监控系统开发工程师，就去做监控软件开发商或监控设备维修，为监控设备厂商提供配套服务。这样的情况，创业者熟悉的是用户的需求，掌握了需求，发掘了客户，找到合适的人来做的难度要低得多。&lt;/p&gt;&#xD;
&lt;p&gt;商业模式也是一个需要注意的事情，小池塘养不出大鱼来，一个局限性较强的细分市场领域，一个受限于资源条件的产品模式，一个不能被较大量复制的产品，均会成为那个小小的池塘，这个问题在创业初期为活命挣扎的时候，容易被忽视。对于一个很有理想和抱负的技术创业型人才，需要提醒一下，选择了一个小池塘将来肯定要面对第二次选择方向的问题。&lt;/p&gt;&#xD;
&lt;p&gt;项目有了，然后考虑整合资源，技术人员常慨叹自己没有没有机会接触外面，缺乏人脉，所以不敢创业或自怨自艾，其实不然，缺乏人脉并不是拓展人脉的机会没有降临，大都是当事人没抓住或不会抓，有一次在丰联广场举办研发管理研讨会，邀请一位常和我慨叹没机会拓展人脉的技术人员去参加，他的回复是&amp;#8220;太远了点，有点阴天，我就不去了&amp;#8221;，结果就是几年之后，他还在慨叹没机会走出去认识人。人脉是要积累的，也是要付出一些精力成本的，没付出就没有收获，这种现象也正常。&lt;/p&gt;&#xD;
&lt;p&gt;还有一些朋友是有了人脉的机会，却不会抓住，我原来所在的行业是一个需要第三方机构强制检测的行业，检测机构的人是技术人员梦寐以求想拉拢的对象，有些工程师也积极的去套关系，积极地交换名片，似乎觉得名片拿到就是人脉建立了，其实不然，在这场不对等的关系中，人脉并没有真正建立，真正可靠的人脉是要你在对方那里有价值，他才会很配合的与你结交，才能互用互利。有位工程师去检测机构，见到他们做实验没工装，就建议如何如何做个工装，检测机构说了&amp;#8220;挺好的主意，你们给我们做吧，我们付点费也是可以的&amp;#8221;，于是这个小伙子就轻松结交了检测机构的核心工程师和主管，并在以后的合作中颇为和谐顺利。所以说，创业的技术人员一定要做个销售高手，也许不会喝酒、不会打保龄，但一定要有所擅长，有所发掘，使自己对别人有价值，这样销售才好做。创业初期，销售产品的同时也是销售创业者本身。&lt;/p&gt;&#xD;
&lt;p&gt;创业看起来很简单，做起来很难，这我们都是知道的。但有一难是我们看不到的，就是合作伙伴团队达到和谐和信任很难，创业成功的家族企业占多数，核心原因之一就是家族成员间不缺信任，沟通成本很低，大家一心于做事，而对非家族的合伙创业来说，这就是个问题了。这一点我走上创业之路后才真正体会到，毕竟在这个企业中，大家的利益是不完全一致的，做核心者，必须做到无私，我很欣赏牛根生的财散人聚财聚人散，老大是付出最多的，吃最大亏的，能镇住一部分局面，如果老大做到了这一点，和谐和信任就相对好建立的多；当然很有魅力和影响力的技术创业者，也可凝聚一批人，但毕竟大多数的还是普通人，不是具有超级个人魅力的管理者，如果是应该也许已经做到了高管倒也未必出来创业了。做到和谐的办法有几个倒也简单，核心领导者不自私甚至多吃亏，坦诚直面问题，把问题摊在桌面上谈，开始的时候确定决策议事规则，出现纠纷按规则办事。&lt;/p&gt;&#xD;
&lt;p&gt;另外一个需要注意的问题是风险，企业家精神的核心思想是冒险和创新，创业又是企业家精神的体现形式，冒险肯定是少不了的，毕竟每个人都不仅仅是为自己生活，都有太太孩子，年迈的双亲，自己累点苦点无所谓，但家人是不能不考虑的。风险需要控制，开始的时候不要陶醉在挣多少钱怎么花上，而先分析清楚最坏可能会赔多少钱，亏的风险自己能否承受，很多文章都在讲，胆子再大一点，太瞻前顾后就不要创业了，还拿出创业成功者高学历者比例很低的例子来说明。但这句话对技术创业者的适用性要斟酌，创业是冒险，但不是找死，险一定是冒得，但冒险的底限不要过于保守，可以把可承受风险损失的数值适当调高一些，比如有5万的存款，可以设定最多赔20万的门限，倒未必是亏到4万的时候就不干了。&lt;/p&gt;&#xD;
&lt;p&gt;做企业从思想上要杜绝机会主义，经常见有几个朋友聚到一起，谈论起来某位是做采购部经理的，在企业里能主导电子元器件的采购，就大家动议成立个元器件贸易公司，从给他家供货开始起步，这种做企业的方式是典型的机会主义。毛主席说：机会主义就是这里有利就到这里去，那里有利就到那里去，无一定原则，无一定方向。批评的是当时一种缺乏远见的军事政治倾向，其实对一个企业的方向来说，也一样适用。做企业必须坚持一个基本的价值理念，就是为客户挣到钱或省了钱，从省下的或挣到的部分里分一勺羹出来作为报酬，不要将企业的命运寄托在一个所谓的机会上，而是稳扎稳打，始终坚持&amp;#8220;通过创造价值赚取收益&amp;#8221;的准则，始终通过自己企业的核心能力来运营，通过能赚取利润的商业模式发展，有机会更好，不必拒绝，可以借机发展一下，但没有机会也一样活，否则就成了守株待兔的农夫。&lt;/p&gt;&#xD;
&lt;p&gt;创业初期的企业，规模虽小，但也要学着做品牌，别觉得这个题目太大太早，也不一定过于高深，在细节上去做，从起名字、建网站、产品外观、服务产品类型、公司口号等等方面围绕着品牌定位去实施。如果是面向一般大众的产品，名字就要简单琅琅上口，面向某特定行业领域的，最好专业化一点，名字的传播本身就是品牌认知的一部分，尤其对于新品牌。具体工作内容上，赋予产品的内涵要与品牌传播的口号相一致，比如安全可靠，那就在产品具体设计上，要通过各种细节体现安全，在组织结构设计上，安全检测和设计控制方面就要有扎实务实的工作，在宣传上，要突出做过的安全试验、安全验证效果，甚至于在名称起名上也要是让人心安的那种。&lt;/p&gt;&#xD;
&lt;p&gt;创业对创业者还有个突出的要求，就是平衡各种事物，挖掘各方资源的能力，创业阶段最突出的矛盾是缺这少那，经常抱怨缺少资金办事的创业者，有可能就不是适合创业的人。做企业的过程中，资源不足是常态，比如缺少仪器、缺少人手、缺少资金、缺销售渠道、缺市场推广人员，创业者必须研究和学会的是在没有路没有工具的地方，通过自己的努力来制造工具，发现或修出一条路来。这部分没有通用规律可言，全靠创业者的个人魅力、智慧、人脉储备了。&lt;/p&gt;&#xD;
&lt;p&gt;创业过程是艰苦的，但也是快乐的，其中最为快乐的是自由，晚上挑灯夜战的时候，那是自由的感觉；苦读技术资料、绞尽脑筋联络某位客户上层人物的时候，那是挑战自我的舒爽；挫败的时候是让人成熟的沉重压力；有结果的时候是让人欢欣的痛快。这是只有创业者才可以体味的快乐，是不同于做产品研发过程解决了一个技术难题的那种。随着中国经济结构的成熟，竞争的加剧，越来越多的创业将不再主要依靠几个良好人际关系的客户实现，而事依靠技术的提升和商业的创新，在不依赖于纯粹销售创意而经济繁荣的商业季节，催生的必定是技术创业者的春天。&lt;/p&gt;&#xD;
&lt;p&gt;本文来自：我爱研发网(52RD.com) - R&amp;amp;D大本营&lt;br /&gt;详细出处：&lt;a href="http://www.52rd.com/blog/Detail_RD.Blog_marshel_23945.html"&gt;&lt;font color="#1463c4"&gt;http://www.52rd.com/blog/Detail_RD.Blog_marshel_23945.html&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/wqj1212/aggbug/2068424.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/wqj1212/archive/2011/06/02/2068424.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/wqj1212/archive/2011/01/23/1942740.html</id><title type="text">转  在OpenCV中用cvCalibrateCamera2进行相机标定(附程序)</title><summary type="text">http://www.opencv.org.cn/forum/viewtopic.php?t=4603</summary><published>2011-01-23T15:35:00Z</published><updated>2011-01-23T15:35:00Z</updated><author><name>wqj1212</name><uri>http://www.cnblogs.com/wqj1212/</uri></author><link rel="alternate" href="http://www.cnblogs.com/wqj1212/archive/2011/01/23/1942740.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/wqj1212/archive/2011/01/23/1942740.html"/><content type="html">&lt;a href="http://www.opencv.org.cn/forum/viewtopic.php?t=4603"&gt;http://www.opencv.org.cn/forum/viewtopic.php?t=4603&lt;/a&gt;&lt;img src="http://www.cnblogs.com/wqj1212/aggbug/1942740.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/wqj1212/archive/2011/01/23/1942740.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/wqj1212/archive/2010/11/21/1883033.html</id><title type="text">四元数与欧拉角之间的转换</title><summary type="text">在3D图形学中，最常用的旋转表示方法便是四元数和欧拉角，比起矩阵来具有节省存储空间和方便插值的优点。本文主要归纳了两种表达方式的转换，计算公式采用3D笛卡尔坐标系：  图1 3D Cartesian coordinate System (from wikipedia) 定义分别为绕Z轴、Y轴、X轴的旋转角度，如果用Tait-Bryan angle表示，分别为Yaw、Pitch、Roll。  图2 ...</summary><published>2010-11-21T03:32:00Z</published><updated>2010-11-21T03:32:00Z</updated><author><name>wqj1212</name><uri>http://www.cnblogs.com/wqj1212/</uri></author><link rel="alternate" href="http://www.cnblogs.com/wqj1212/archive/2010/11/21/1883033.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/wqj1212/archive/2010/11/21/1883033.html"/><content type="html">&amp;nbsp;&amp;nbsp;在3D图形学中，最常用的旋转表示方法便是四元数和欧拉角，比起矩阵来具有节省存储空间和方便插值的优点。本文主要归纳了两种表达方式的转换，计算公式采用3D笛卡尔坐标系： &#xD;
&lt;p style="text-align: center"&gt;&lt;img alt="" src="http://www.cppblog.com/images/cppblog_com/heath/121309_1044_1.png" /&gt; &lt;/p&gt;&#xD;
&lt;p style="text-align: center"&gt;图1 3D Cartesian coordinate System (from wikipedia) &lt;/p&gt;&#xD;
&lt;p&gt;定义&lt;img alt="" src="http://www.cppblog.com/images/cppblog_com/heath/121309_1044_2.png" /&gt;分别为绕Z轴、Y轴、X轴的旋转角度，如果用Tait-Bryan angle表示，分别为Yaw、Pitch、Roll。 &lt;/p&gt;&#xD;
&lt;p style="text-align: center"&gt;&lt;img alt="" src="http://www.cppblog.com/images/cppblog_com/heath/121309_1044_3.png" /&gt; &lt;/p&gt;&#xD;
&lt;p style="text-align: center"&gt;图2 Tait-Bryan angles (from wikipedia) &lt;/p&gt;&#xD;
&lt;p&gt;一、四元数的定义 &lt;/p&gt;&#xD;
&lt;p&gt;&lt;img alt="" src="http://www.cppblog.com/images/cppblog_com/heath/121309_1044_4.png" /&gt; &lt;/p&gt;&#xD;
&lt;p&gt;通过旋转轴和绕该轴旋转的角度可以构造一个四元数： &lt;/p&gt;&#xD;
&lt;p&gt;&lt;img alt="" src="http://www.cppblog.com/images/cppblog_com/heath/121309_1044_5.png" /&gt; &lt;/p&gt;&#xD;
&lt;p&gt;其中&lt;img alt="" src="http://www.cppblog.com/images/cppblog_com/heath/121309_1044_6.png" /&gt;是绕旋转轴旋转的角度，&lt;img alt="" src="http://www.cppblog.com/images/cppblog_com/heath/121309_1044_7.png" /&gt;为旋转轴在x,y,z方向的分量（由此确定了旋转轴）。 &lt;/p&gt;&#xD;
&lt;p&gt;二、欧拉角到四元数的转换 &lt;/p&gt;&#xD;
&lt;p style="text-align: center"&gt;&lt;img alt="" src="http://www.cppblog.com/images/cppblog_com/heath/121309_1044_8.png" /&gt; &lt;/p&gt;&#xD;
&lt;p&gt;三、四元数到欧拉角的转换 &lt;/p&gt;&#xD;
&lt;p style="text-align: center"&gt;&lt;img alt="" src="http://www.cppblog.com/images/cppblog_com/heath/121309_1044_9.png" /&gt; &lt;/p&gt;&#xD;
&lt;p&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;arctan&lt;/em&gt;和&lt;em&gt;arcsin&lt;/em&gt;的结果是&lt;img alt="" src="http://www.cppblog.com/images/cppblog_com/heath/121309_1044_10.png" /&gt;，这并不能覆盖所有朝向(对于&lt;img alt="" src="http://www.cppblog.com/images/cppblog_com/heath/121309_1044_11.png" /&gt;角&lt;img alt="" src="http://www.cppblog.com/images/cppblog_com/heath/121309_1044_12.png" /&gt;的取值范围已经满足)，因此需要用&lt;em&gt;atan2&lt;/em&gt;来代替&lt;em&gt;arctan&lt;/em&gt;。 &lt;/p&gt;&#xD;
&lt;p style="text-align: center"&gt;&lt;img alt="" src="http://www.cppblog.com/images/cppblog_com/heath/121309_1044_13.png" /&gt; &lt;/p&gt;&#xD;
&lt;p&gt;四、在其他坐标系下使用 &lt;/p&gt;&#xD;
&lt;p style="margin-left: 21pt"&gt;在其他坐标系下，需根据坐标轴的定义，调整一下以上公式。如在Direct3D中，笛卡尔坐标系的X轴变为Z轴，Y轴变为X轴，Z轴变为Y轴（无需考虑方向）。 &lt;/p&gt;&#xD;
&lt;p style="text-align: center"&gt;&lt;img alt="" src="http://www.cppblog.com/images/cppblog_com/heath/121309_1044_14.png" /&gt; &lt;/p&gt;&#xD;
&lt;p&gt;五、示例代码 &lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://www.cppblog.com/Files/heath/Euler2Quaternion.rar"&gt;&lt;font color="#003366"&gt;http://www.cppblog.com/Files/heath/Euler2Quaternion.rar&lt;/font&gt;&lt;/a&gt;&lt;br /&gt;Demo渲染两个模型，左边使用欧拉角，右边使用四元数，方向键Up、Left、Right旋转模型。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;参考文献： &lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;[1] http://en.wikipedia.org/wiki/Conversion_between_quaternions_and_Euler_angles &lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;[2] Ken Shoemake, Animating Rotation with Quaternion Curves, 1985&lt;/strong&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/wqj1212/aggbug/1883033.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/wqj1212/archive/2010/11/21/1883033.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry></feed>
