要对像素进行处理,怎么取得一个bmp的第i行j列的像素
解决方案 »
- 求助:怎样在VC中,把电子表格中,列项文件提取出来,放在TXT文件中
- VC中Shif键按下,捕捉数字键的问题
- 如何得到一个其它窗口进程的HWND??
- 如何更改这些区域的背景色?
- 为什么对话框中按tab键不能移动焦点?
- 请问:如何获取按钮控件所处的屏幕坐标?
- 如何将CString类型转Coledatetime类型 ?????????????????????????????????????????????/
- 请问高手如何进行软件的调试,来者有分~
- 怎样使金山词霸在Pdf文件中也具有即指即译的功能?
- CSerialPort串口类,析构函数中退出串口线程问题
- 有关ocx的自定义属性问题
- 工业控制中的远程通信相关,为何自己会忽然停止? 200 分
HDC hdc, // handle to device context
HBITMAP hbmp, // handle to bitmap
UINT uStartScan, // first scan line to set in destination bitmap
UINT cScanLines, // number of scan lines to copy
LPVOID lpvBits, // address of array for bitmap bits
LPBITMAPINFO lpbi, // address of structure with bitmap data
UINT uUsage // RGB or palette index
);
* int y - 象素在Y轴的坐标
*
* \返回值:
* int - 返回象素在图象数据块中的真实地址
*
* \说明:
* 该函数得到坐标为(x,y)的象素点的真实地址。由于DIB结构中对图象数据排列的
* 方式为从下到上,从左到右的,所以需要进行转换。
*
************************************************************************
*/
LONG CDib::GetPixelOffset(int x, int y)
{
CSize sizeSaveDim;
sizeSaveDim = GetDibSaveDim(); LONG lOffset = (LONG) (sizeSaveDim.cy - y - 1) * sizeSaveDim.cx +
x / (8 / m_lpBMIH->biBitCount);
return lOffset;
}
CSize CDib::GetDibSaveDim()
{
CSize sizeSaveDim;
sizeSaveDim.cx = ( m_lpBMIH->biWidth * m_lpBMIH->biBitCount + 31)/32 * 4;
sizeSaveDim.cy = m_lpBMIH->biHeight;
return sizeSaveDim;}
其中 m_lpBMIH; 是 DIB信息头指针
LineBytes=(DIBWidth+3)&~3;
(i,j)的象素值为*(lpPixels+(DIBHeight-1-j)*LineBytes+i)
if(真彩色图像)
LineBytes=(DIBWidth*3+3)&~3;
(i,j)的象素值为
b:*(lpPixels+(DIBHeight-1-j)*LineBytes+i)
g:*(lpPixels+(DIBHeight-1-j)*LineBytes+i+1)
r:*(lpPixels+(DIBHeight-1-j)*LineBytes+i+2)