怎么取得一个bmp的第i行j列的像素

amartapple 2003-04-23 08:24:43
要对像素进行处理,怎么取得一个bmp的第i行j列的像素
...全文
41 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
amartapple 2003-04-24
  • 打赏
  • 举报
回复
不是256色灰度图,调色版索引值与颜色值不是对应的

24位图我就是那么做的,可是结果好像不对

能不能贴出代码,研究一下

谢谢
chegtion 2003-04-24
  • 打赏
  • 举报
回复
if(灰度图像)
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)
pefwsng 2003-04-24
  • 打赏
  • 举报
回复
* int x - 象素在X轴的坐标
* 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信息头指针
HanZhu1 2003-04-23
  • 打赏
  • 举报
回复
256色图和调色版共用


24位图
计算长度宽度就可以了!

amartapple 2003-04-23
  • 打赏
  • 举报
回复
那么怎么取得这一像素的R,G,B值

256色图



24位图
Pipi0714 2003-04-23
  • 打赏
  • 举报
回复
xuexue
icansaymyabc 2003-04-23
  • 打赏
  • 举报
回复
int GetDIBits(
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
);

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧