⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 chap02.htm

📁 数字图像处理入门. 一位图像处理高手写的书. 从图像处理的最基础开始,然后慢慢以一些例子做说明,进入图像处理的更高阶段.学习图像处理不可多得的比较朴实的书
💻 HTM
📖 第 1 页 / 共 5 页
字号:
&quot;Times New Roman&quot;'>对应</span><span
lang=EN-US>DstX1</span><span style='font-family:宋体;
&quot;Times New Roman&quot;'>在原图中的</span><span lang=EN-US>x</span><span
style='font-family:宋体;"Times New Roman"'>坐标</span></p>
  <p style='line-height:18.0pt'><span
lang=EN-US>RectWidth=DstX1-DstX0; //</span><span style='font-family:宋体;  
&quot;Times New Roman&quot;'>有图区域的宽度</span></p>
  <p style='line-height:18.0pt'><span
lang=EN-US>//yVisible</span><span style='font-family:宋体;"Times New Roman";"Times New Roman"'>为</span><span
lang=EN-US>FALSE</span><span style='font-family:宋体;
&quot;Times New Roman&quot;'>时,表示</span><span lang=EN-US>y</span><span
style='font-family:宋体;"Times New Roman"'>方向已经移出了可显示的范围</span></p>
  <p style='line-height:18.0pt'><span
lang=EN-US>yVisible=TRUE; </span></p>
  <p style='line-height:18.0pt'><span
lang=EN-US>if( yOffset&lt;= -bi.biHeight )</span></p>
  <p style='line-height:
18.0pt'><span lang=EN-US>yVisible=FALSE;</span></p>
  <p style='line-height:18.0pt'><span
lang=EN-US>else if( yOffset&lt;=0){</span></p>
  <p style='line-height:
18.0pt'><span lang=EN-US>DstY0=0; //</span><span style='font-family:宋体;
&quot;Times New Roman&quot;'>表示移动后,有图区域的左上角点的</span><span
lang=EN-US>y</span><span style='font-family:宋体;
&quot;Times New Roman&quot;'>坐标</span></p>
  <p style='line-height:
18.0pt'><span lang=EN-US>DstY1=bi.biHeight+yOffset; //</span><span  
style='font-family:宋体;"Times New Roman"'>表示移动后,有图区域的右下角点的</span><span lang=EN-US>y</span><span
style='font-family:宋体;"Times New Roman"'>坐标</span></p>
  <p style='line-height:18.0pt'><span
lang=EN-US>}</span></p>
  <p style='line-height:18.0pt'><span
lang=EN-US>else if ( yOffset&lt;bi.biHeight){</span></p>
  <p style='line-height:
18.0pt'><span lang=EN-US>DstY0=yOffset;</span></p>
  <p style='line-height:
18.0pt'><span lang=EN-US>DstY1=bi.biHeight;</span></p>
  <p style='line-height:18.0pt'><span
lang=EN-US>}</span></p>
  <p style='line-height:18.0pt'><span
lang=EN-US>else</span></p>
  <p style='line-height:
18.0pt'><span lang=EN-US>yVisible=FALSE;</span></p>
  <p style='line-height:18.0pt'><span
lang=EN-US>SrcY0=DstY0-yOffset; //</span><span style='font-family:宋体;
&quot;Times New Roman&quot;'>对应</span><span
lang=EN-US>DstY0</span><span style='font-family:宋体;
&quot;Times New Roman&quot;'>在原图中的</span><span lang=EN-US>y</span><span
style='font-family:宋体;"Times New Roman"'>坐标</span></p>
  <p style='line-height:18.0pt'><span
lang=EN-US>SrcY1=DstY1-yOffset; //</span><span style='font-family:宋体;  
&quot;Times New Roman&quot;'>对应</span><span
lang=EN-US>DstY1</span><span style='font-family:宋体;
&quot;Times New Roman&quot;'>在原图中的</span><span lang=EN-US>y</span><span
style='font-family:宋体;"Times New Roman"'>坐标</span></p>
  <p style='line-height:18.0pt'><span
lang=EN-US>RectHeight=DstY1-DstY0; //</span><span style='font-family:宋体;  
&quot;Times New Roman&quot;'>有图区域的高度</span></p>
  <p style='line-height:18.0pt'><span
lang=EN-US>if( xVisible &amp;&amp; yVisible){ //x,y</span><span  
style='font-family:宋体;"Times New Roman"'>方向都没有完全移出可显示的范围</span></p>
  <p style='line-height:
18.0pt'><span lang=EN-US>for(i=0;i&lt;RectHeight;i++){ //</span><span  
style='font-family:宋体;"Times New Roman"'>拷贝每一行</span></p>
  <p style='line-height:
18.0pt'><span lang=EN-US>//lpPtr</span><span style='font-family:宋体;"Times New Roman";"Times New Roman"'>指向要拷贝的那一行的最左边的象素对应在原图中的位</span></p>
  <p style='line-height:
18.0pt'><span lang=EN-US>//</span><span style='font-family:宋体;"Times New Roman";"Times New Roman"'>置。特别要<b>注意的是</b>,由于</span><span
lang=EN-US>.bmp</span><span style='font-family:宋体;
&quot;Times New Roman&quot;'>是上下颠倒的,<b>偏移是</b></span><b><span
lang=EN-US></span></b></p>
  <p style='line-height:
18.0pt'><span lang=EN-US>//(BufSize-LineBytes-(i+SrcY0)*LineBytes)+SrcX0</span><span
style='font-family:宋体;"Times New Roman"'>,<b>而不是</b></span><b><span lang=EN-US></span></b></p>
  <p style='line-height:
18.0pt'><span lang=EN-US>//(i+SrcY0)*LineBytes)+SrcX0</span><span
style='font-family:宋体;"Times New Roman"'>,你试着举个例子就明白了。</span></p>
  <p style='line-height:
18.0pt'><span lang=EN-US>lpPtr=(char*)lpImgData+(BufSize-LineBytes-</span></p>
  <p style='line-height:
18.0pt'><span lang=EN-US>(i+SrcY0)*LineBytes)+SrcX0;</span></p>
  <p style='line-height:
18.0pt'><span lang=EN-US>//lpTempPtr</span><span style='font-family:宋体;
&quot;Times New Roman&quot;'>指向要拷贝的那一行的最左边的象素对应在新图中</span><span
lang=EN-US>//</span><span style='font-family:宋体;
&quot;Times New Roman&quot;'>的位置。同样要注意上面</span><span lang=EN-US>//</span><span
style='font-family:宋体;"Times New Roman"'>的问题。</span></p>
  <p style='line-height:
18.0pt'><span lang=EN-US>lpTempPtr=(char*)lpTempImgData+</span></p>
  <p style='line-height:
18.0pt'><span lang=EN-US>(BufSize-LineBytes-(i+DstY0)*LineBytes)+DstX0;</span></p>
  <p style='line-height:
18.0pt'><span lang=EN-US>//</span><span style='font-family:宋体;"Times New Roman";"Times New Roman"'>拷贝一行</span><span
lang=EN-US>(</span><span style='font-family:宋体;
&quot;Times New Roman&quot;'>宽度为</span><span lang=EN-US>RectWidth)</span></p>
  <p style='line-height:
18.0pt'><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
    </span>memcpy(lpTempPtr,lpPtr,RectWidth);</p>
  <p style='line-height:
18.0pt'><span lang=EN-US>}</span></p>
  <p style='line-height:18.0pt'><span
lang=EN-US>}</span></p>
  <p style='line-height:18.0pt'><span
lang=EN-US>hDc=GetDC(hWnd);</span></p>
  <p style='line-height:18.0pt'><span
lang=EN-US>if(hBitmap!=NULL)</span></p>
  <p style='line-height:
18.0pt'><span lang=EN-US>DeleteObject(hBitmap); //</span><span
style='font-family:宋体;"Times New Roman"'>释放原来的位图句柄</span></p>
  <p style='line-height:18.0pt'><span
lang=EN-US>//</span><span style='font-family:宋体;
&quot;Times New Roman&quot;'>产生新的位图</span></p>
  <p style='line-height:18.0pt'><span
lang=EN-US>hBitmap=CreateDIBitmap(hDc,(LPBITMAPINFOHEADER)lpTempImgData,</span></p>
  <p style='line-height:
18.0pt'><span lang=EN-US>(LONG)CBM_INIT,</span></p>
  <p style='line-height:
18.0pt'><span lang=EN-US>(LPSTR)lpTempImgData+</span></p>
  <p style='line-height:
18.0pt'><span lang=EN-US>sizeof(BITMAPINFOHEADER) +</span></p>
  <p style='line-height:
18.0pt'><span lang=EN-US>NumColors*sizeof(RGBQUAD),</span></p>
  <p style='line-height:
18.0pt'><span lang=EN-US>(LPBITMAPINFO)lpTempImgData, </span></p>
  <p style='line-height:
18.0pt'><span lang=EN-US>DIB_RGB_COLORS);</span></p>
  <p style='line-height:18.0pt'><span
lang=EN-US>//</span><span style='font-family:宋体;
&quot;Times New Roman&quot;'>将平移后的图象存成文件</span></p>
  <p style='line-height:18.0pt'><span
lang=EN-US>hf=_lcreat(&quot;c:\\translation.bmp&quot;,0);</span></p>
  <p style='line-height:18.0pt'><span
lang=EN-US>_lwrite(hf,(LPSTR)&amp;bf,sizeof(BITMAPFILEHEADER)); </span></p>
  <p style='line-height:18.0pt'><span
lang=EN-US>_lwrite(hf,(LPSTR)lpTempImgData,BufSize);</span></p>
  <p style='line-height:18.0pt'><span
lang=EN-US>_lclose(hf);</span></p>
  <p style='line-height:18.0pt'><span
lang=EN-US>//</span><span style='font-family:宋体;
&quot;Times New Roman&quot;'>释放资源和内存</span></p>
  <p style='line-height:18.0pt'><span
lang=EN-US>ReleaseDC(hWnd,hDc);</span></p>
  <p style='line-height:18.0pt'><span
lang=EN-US>LocalUnlock(hTempImgData);</span></p>
  <p style='line-height:18.0pt'><span
lang=EN-US>LocalFree(hTempImgData);</span></p>
  <p style='line-height:18.0pt'><span
lang=EN-US>GlobalUnlock(hImgData);</span></p>
  <p style='line-height:18.0pt'><span
lang=EN-US>return TRUE;</span></p>
  <p style='line-height:18.0pt'><span lang=EN-US>}</span><span
lang=EN-US style='font-size:9.0pt;'></span></p>
  <h2> <span
lang=EN-US>2.2</span> <span lang=EN-US> </span><a name="_Toc486331869"></a><a  
name="_Toc486332869"></a><a name="_Toc486338978"></a><a name="_Toc454810843"></a><a
name="_Toc454856617"><span><span>旋转</span></span></a></h2>
  <p style='line-height:18.0pt'><span
style='font-family:宋体;"Times New Roman"'>旋转</span><span lang=EN-US>(rotation)</span><span
style='font-family:宋体;"Times New Roman"'>有一个绕着什么转的问题,通常的做法是以图象的中心为圆心旋转,举个例子,图</span><span lang=EN-US>2.7</span><span
style='font-family:宋体;"Times New Roman"'>旋转</span><span lang=EN-US>30</span><span style='font-family:
宋体;&quot;Times New Roman&quot;'>度</span><span
lang=EN-US>(</span><span style='font-family:宋体;
&quot;Times New Roman&quot;'>顺时针方向</span><span lang=EN-US>)</span><span
style='font-family:宋体;"Times New Roman"'>后如图</span><span lang=EN-US>2.8</span><span style='font-family:
宋体;&quot;Times New Roman&quot;'>所示:</span></p>
  <table border=0 cellspacing=0 cellpadding=0>
    <tr> 
      <td width=276 valign=bottom class="Normal"> 
        <p class=a style='line-height:18.0pt'><span lang=EN-US> <img width=145 height=86
  src="chap02.files/image022.jpg"  v:shapes="_x0000_i1027"> </span></p>
        <p align=center style='text-align:center;line-height:18.0pt'><b><span
  style='font-family:宋体;"Times New Roman"'>图</span>2.7&nbsp;&nbsp;&nbsp;&nbsp;   
          </b><b><span style='font-family:
  宋体;&quot;Times New Roman&quot;'>旋转前的图</span><span
  lang=EN-US></span></b></p>
      </td>
      <td width=276 valign=bottom class="Normal"> 
        <p class=a style='line-height:18.0pt'><span lang=EN-US> <img width=169 height=147
  src="chap02.files/image023.gif"  v:shapes="_x0000_i1028"> </span></p>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -