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

📄 chap05.htm

📁 数字图像处理入门. 一位图像处理高手写的书. 从图像处理的最基础开始,然后慢慢以一些例子做说明,进入图像处理的更高阶段.学习图像处理不可多得的比较朴实的书
💻 HTM
📖 第 1 页 / 共 5 页
字号:
  <p style='line-height:
18.0pt'><span lang=EN-US>return FALSE;</span></p>
  <p style='line-height:18.0pt'><span
lang=EN-US>}</span></p>
  <p style='line-height:18.0pt'>lpImgData=(LPBITMAPINFOHEADER)GlobalLock(hImgData);&nbsp;&nbsp;&nbsp; 
  </p>
  <p style='line-height:18.0pt'><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>lpTempImgData=(LPBITMAPINFOHEADER)LocalLock(hTempImgData);</p>
  <p style='line-height:18.0pt'><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>//<span
style='font-family:宋体;"Times New Roman"'>拷贝头信息</span></p>
  <p style='line-height:18.0pt'><span
lang=EN-US>memcpy(lpTempImgData,lpImgData,BufSize);</span></p>
  <p style='line-height:18.0pt'><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>hDc=GetDC(hWnd);</p>
  <p style='line-height:18.0pt'><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>if(NumColors!=0){   
    //NumColors<span style='font-family:宋体;
&quot;Times New Roman&quot;'>不为</span><span lang=EN-US>0</span><span
style='font-family:宋体;"Times New Roman"'>说明是带调色板的</span></p>
  <p style='line-height:
18.0pt'><span lang=EN-US>lpPtr=(char *)lpImgData+sizeof(BITMAPINFOHEADER); </span></p>  
  <p style='line-height:
18.0pt'><span lang=EN-US>//</span><span style='font-family:宋体;"Times New Roman";"Times New Roman"'>指向原图数据</span></p>
  <p style='line-height:18.0pt'><span
lang=EN-US>lpTempPtr=(char *)lpTempImgData+sizeof(BITMAPINFOHEADER); </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>//</span><span style='font-family:宋体;
&quot;Times New Roman&quot;'>为新调色板分配内存</span></p>
  <p style='line-height:18.0pt'><span
lang=EN-US>hPal=LocalAlloc(LHND,sizeof(LOGPALETTE)+</span></p>
  <p style='line-height:18.0pt'><span
lang=EN-US>NumColors*sizeof(PALETTEENTRY));</span></p>
  <p style='line-height:18.0pt'><span
lang=EN-US>pPal =(LOGPALETTE *)LocalLock(hPal);</span></p>
  <p style='line-height:18.0pt'><span
lang=EN-US>pPal-&gt;palNumEntries =(WORD) NumColors;</span></p>
  <p style='line-height:18.0pt'>pPal-&gt;palVersion&nbsp;&nbsp;&nbsp; = 0x300;</p>  
  <p style='line-height:18.0pt'><span
lang=EN-US>for (i = 0; i &lt; NumColors; i++) {</span></p>
  <p style='line-height:18.0pt'><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Blue=(unsigned   
    char )(*lpPtr++);</p>  
  <p style='line-height:18.0pt'><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Green=(unsigned   
    char )(*lpPtr++);</p>  
  <p style='line-height:18.0pt'><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Red=(unsigned   
    char )(*lpPtr++);</p>  
  <p style='line-height:18.0pt'><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>lpPtr++;</p>
  <p style='line-height:18.0pt'><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>//<span
style='font-family:宋体;"Times New Roman"'>反转调色板中的颜色,存入新的调色板</span></p>
  <p style='line-height:18.0pt'><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>pPal-&gt;palPalEntry[i].peRed=(BYTE)(255-Red);</p>
  <p style='line-height:18.0pt'><span
lang=EN-US>pPal-&gt;palPalEntry[i].peGreen=(BYTE)(255-Green);</span></p>
  <p style='line-height:18.0pt'><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>pPal-&gt;palPalEntry[i].peBlue=(BYTE)(255-Blue);</p>
  <p style='line-height:18.0pt'><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>pPal-&gt;palPalEntry[i].peFlags=0;</p>
  <p style='line-height:18.0pt'><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>*(lpTempPtr++)=(unsigned   
    char)(255-Blue);</p>
  <p style='line-height:18.0pt'><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>*(lpTempPtr++)=(unsigned   
    char)(255-Green);</p>
  <p style='line-height:18.0pt'><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>*(lpTempPtr++)=(unsigned   
    char)(255-Red);</p>
  <p style='line-height:18.0pt'><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>*(lpTempPtr++)=0;</p>
  <p style='line-height:18.0pt'><span
lang=EN-US>}</span></p>
  <p style='line-height:18.0pt'>if(hPalette!=NULL)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  </p>
  <p style='line-height:18.0pt'><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>DeleteObject(hPalette);</p>
  <p style='line-height:18.0pt'><span
lang=EN-US>hPalette=CreatePalette(pPal); //</span><span style='font-family:
宋体;&quot;Times New Roman&quot;'>产生新的调色板</span></p>
  <p style='line-height:18.0pt'><span
lang=EN-US>LocalUnlock(hPal);</span></p>
  <p style='line-height:18.0pt'><span
lang=EN-US>LocalFree(hPal);</span></p>
  <p style='line-height:18.0pt'><span
lang=EN-US>if(hPalette){</span></p>
  <p style='line-height:18.0pt'><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>hPrevPalette=SelectPalette(hDc,hPalette,FALSE);</p>
  <p style='line-height:18.0pt'><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>RealizePalette(hDc);</p>
  <p style='line-height:18.0pt'><span
lang=EN-US>}</span></p>
  <p style='line-height:18.0pt'><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}</p>
  <p style='line-height:18.0pt'><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>else{   
    //<span
style='font-family:宋体;"Times New Roman"'>不带调色板,说明是真彩色图</span></p>
  <p style='line-height:18.0pt'><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
    </span>for(y=0;y&lt;bi.biHeight;y++){</p>
  <p style='line-height:18.0pt'><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
    </span>lpPtr=(char *)lpImgData+(BufSize-LineBytes-y*LineBytes);</p>  
  <p style='line-height:18.0pt'><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
    </span>lpTempPtr=(char *)lpTempImgData+(BufSize-LineBytes-y*LineBytes);</p>  
  <p style='line-height:18.0pt'><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
    </span>for(x=0;x&lt;bi.biWidth;x++){</p>
  <p style='line-height:18.0pt'><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
    </span>Blue=(unsigned char )(*lpPtr++);</p>  
  <p style='line-height:18.0pt'><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
    </span>Green=(unsigned char )(*lpPtr++);</p>  
  <p style='line-height:18.0pt'><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
    </span>Red=(unsigned char )(*lpPtr++);</p>  
  <p style='line-height:18.0pt'><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
    </span>//<span
style='font-family:宋体;"Times New Roman"'>反转位图数据中的颜色,存入新的位图数据中</span></p>
  <p style='line-height:18.0pt'><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
    </span>*(lpTempPtr++)=(unsigned char)(255-Blue);</p>  
  <p style='line-height:18.0pt'><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
    </span>*(lpTempPtr++)=(unsigned char)(255-Green);</p>  
  <p style='line-height:18.0pt'><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
    </span>*(lpTempPtr++)=(unsigned char)(255-Red);</p>  
  <p style='line-height:18.0pt'><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
    </span>}</p>
  <p style='line-height:18.0pt'><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
    </span>}</p>
  <p style='line-height:18.0pt'><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}</p>
  <p style='line-height:18.0pt'><span
lang=EN-US>if(hBitmap!=NULL)</span></p>
  <p style='line-height:18.0pt'><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&nbsp;&nbsp;&nbsp;   
    DeleteObject(hBitmap);</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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
    </span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (LPSTR)lpTempImgData+</p>  
  <p style='line-height:
18.0pt'><span lang=EN-US>sizeof(BITMAPINFOHEADER)+</span></p>
  <p style='line-height:
18.0pt'><span>&nbsp; </span>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   
    NumColors*sizeof(RGBQUAD),</p>
  <p style='line-height:18.0pt'><span>&nbsp;&nbsp; </span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   
    (LPBITMAPINFO)lpTempImgData,</p>
  <p style='line-height:
18.0pt'><span lang=EN-US>DIB_RGB_COLORS);</span></p>
  <p style='line-height:18.0pt'><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>if(hPalette   
    &amp;&amp; hPrevPalette){</p>  
  <p style='line-height:18.0pt'><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
    </span>SelectPalette(hDc,hPrevPalette,FALSE);</p>
  <p style='line-height:18.0pt'><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
    </span>RealizePalette(hDc);</p>
  <p style='line-height:18.0pt'><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}</p>
  <p style='line-height:18.0pt'><span
lang=EN-US>hf=_lcreat(&quot;c:\\invert.bmp&quot;,0);</span></p>
  <p style='line-height:18.0pt'><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>_lwrite(hf,(LPSTR)&amp;bf,sizeof(BITMAPFILEHEADER)); 
  </p>
  <p style='line-height:18.0pt'><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>_lwrite(hf,(LPSTR)lpTempImgData,BufSize);</p>
  <p style='line-height:18.0pt'><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>_lclose(hf);</p>
  <p style='line-height:18.0pt'><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>//<span
style='font-family:宋体;"Times New Roman"'>释放内存和资源</span></p>
  <p style='line-height:18.0pt'><span>&nbsp;</span>&nbsp;&nbsp;&nbsp;&nbsp; ReleaseDC(hWnd,hDc);</p>  
  <p style='line-height:18.0pt'><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>LocalUnlock(hTempImgData);</p>
  <p style='line-height:18.0pt'><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>LocalFree(hTempImgData);</p>
  <p style='line-height:18.0pt'><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>GlobalUnlock(hImgData);</p>
  <p style='line-height:18.0pt'><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>return   
    TRUE;</p>
  <p style='line-height:18.0pt'><span lang=EN-US>}</span></p>
  <h2> <span
lang=EN-US>5.2</span> <span lang=EN-US> </span><a name="_Toc486331883"></a><a  
name="_Toc486332883"></a><a name="_Toc486338992"></a><a name="_Toc454810857"></a><a
name="_Toc454856631"><span><span>彩色图转灰度图</span></span></a></h2>
  <p style='line-height:18.0pt'><span
style='font-family:宋体;"Times New Roman"'>第</span><span lang=EN-US>2</span><span style='font-family:

⌨️ 快捷键说明

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