IpPtr=(char *)Iplmg Data( BufSize-LineBytes-y * Line Bytes) pTempPtr为指向新图位图数据的指针 lpTempPtr=(char *)Ip Templmg Data+ ( BufSize-LineBytes-y*Line Bytes) for(x=0 X<bi bi width; x++)4 f((num>2)> BayerPattern[y&x&刀)∥右移两位后做比较 ( pTempPtr++)=( unsigned char)255,/白点 else*( IpTempPtr++)=( unsigned char)O,∥打黑点 if(hBitmap l=NULL) DeleteObject(hBitmap) hDc=GetDC(hWnd) 形成新的位图 hBitmap=CreateDI Bitmap(hDc, (LPBITMAPINFOHEADER)Ip Templmg Data, (LONG)CBM INIT. sizeof( BITMAPINFOHEADER)+ umColors*sizeof(RGBQUAD) (LPBITMAPINFO)IpTemplmg Data, DIB RGB COLORS) hf- creat("c: Wimbm3 bmp", 0); Iwrite(hf, (LPSTR)&bf, sizeof( BI TMAPFILEHEADER): Iwrite(hf, (LPSTR)Ip Templmg Data, BufSize) Iclose(hf); ∥释放内存和资源 ReleaseDC(hWnd, hDc) LocalUnlock(hTemplmg Data Local Free(hTemplmg Data) GlobalUnlock(hmg Data) return TRUE. 42抖动法 让我们考虑更坏的情况:即使使用了图案化技术,仍然得不到要求的灰度级别。举例说明: 假设有一幅600×450×8bt的灰度图,当用分辨率为30dpi×30odpi的激光打印机将其打 印到8×6英寸的纸上时,每个象素可以用(2400600×(1800/450=4×4个点大小的图案来lpPtr=(char *)lpImgData+(BufSize-LineBytes-y*LineBytes); //lpTempPtr 为指向新图位图数据的指针 lpTempPtr=(char *)lpTempImgData+(BufSize-LineBytes-y*LineBytes); for(x=0;x<bi.biWidth;x++){ num=(unsigned char)*lpPtr++; if ( (num>>2) > BayerPattern[y&7][x&7]) //右移两位后做比较 *(lpTempPtr++)=(unsigned char)255; //打白点 else *(lpTempPtr++)=(unsigned char)0; //打黑点 } } if(hBitmap!=NULL) DeleteObject(hBitmap); hDc=GetDC(hWnd); //形成新的位图 hBitmap=CreateDIBitmap(hDc,(LPBITMAPINFOHEADER)lpTempImgData, (LONG)CBM_INIT, (LPSTR)lpTempImgData+ sizeof(BITMAPINFOHEADER)+ NumColors*sizeof(RGBQUAD), (LPBITMAPINFO)lpTempImgData, DIB_RGB_COLORS); hf=_lcreat("c:\\limbm3.bmp",0); _lwrite(hf,(LPSTR)&bf,sizeof(BITMAPFILEHEADER)); _lwrite(hf,(LPSTR)lpTempImgData,BufSize); _lclose(hf); //释放内存和资源 ReleaseDC(hWnd,hDc); LocalUnlock(hTempImgData); LocalFree(hTempImgData); GlobalUnlock(hImgData); return TRUE; } 4.2 抖动法 让我们考虑更坏的情况:即使使用了图案化技术,仍然得不到要求的灰度级别。举例说明: 假设有一幅 600×450×8bit 的灰度图,当用分辨率为 300dpi×300dpi 的激光打印机将其打 印到 8×6 英寸的纸上时,每个象素可以用(2400/600)×(1800/450)=4×4 个点大小的图案来