关于二值位图读取!! 本帖最后由 lxchgs 于 2014-04-07 10:30:35 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 int pitch=width+width%2;//??????bmp 宽度必须是 4 字节 的整数倍 , 不够的要补齐.你这里:width%2 =0 或 1;width奇数+1=偶数width偶数+0=偶数这样 width 一定是2的倍数,也就是 一定是4的倍数.[(i*pitch+j)*2];//?????就是计算 地址i*pitch 高*宽; +当前宽;*2 是16位 好像有问题, 2,4,6,8,10 ;其中 6 , 10 就不是.我记不清楚了 好像 NT 是要求 WORD , 通常 要求4的倍数. width=13,按它这个写法pitch=width+width%2 =14,14就不是4的倍数 我记得正确的写法是(width+4) & 0xfffffffC if(info.bmiHeader.biBitCount==1) { int pitch=width+width%2; for(int i=0;i<height;i++) { for(int j=0;j<width;j++) { short int a = (short int)buffer[(i*pitch+j)/8];// if(a != 0) { pbMap[(height - i -1)*width+ j] = 1;//这里应该怎么设置 } } } }请问下,如果处理二值图pbMap[(height - i -1)*width+ j] = 1;这里应该怎么设置? BYTE a = (short int)buffer[(i*pitch+j)/8];// if(a != 0) { pbMap[(height - i -1)*width+ j] = 1;// 8位 都==1? } pbMap就是用A*来寻路的!应该怎么设置呢? 不知道从 buffer 转存到 pbMap 目的何在? 就是根据二值位图0 1存放到pbMap,然后根据pbMap中点阵来使用A星算法 // if(a != 0) { pbMap[i*pitch+j]= a ;//这里应该怎么设置 } 建议使用HBITMAP hBmp = CreateDIBSection(hMemDC, &bmpinfo, DIB_RGB_COLORS, 0, NULL, 0);// second GetDIBits call to make DIB LPBYTE lpImage = (LPBYTE) new char[m_dwSizeImage]; VERIFY(::GetDIBits(pDC->GetSafeHdc(), hBitmap, 0, (UINT) lpBMIH->biHeight, lpImage, (LPBITMAPINFO) lpBMIH, DIB_RGB_COLORS));不要那个pbMap QQ上登陆界面中的用户名下拉框中名字后面带个叉用MFC怎么实现 VC++怎么把结果集用数组来存这样能对多个结果集遍历 不同工程下的类库的调用问题????? 对#include<window.h>的疑惑 请问一下用过cximage类(cximage571_src)的兄弟! 两台不在一个局域网的计算机怎样共享? 如果用VC写程序,让某种类型的文件的Default打开方式变成我指定的一个exe。 要读取注册表中默认键的值,传入什么名字阿 请教:在98上如何用程序创建新的拨号连接? FFT轮廓提取 关于图片保存本地后处理的问题 mfc 编写网络程序,发送数据时,如何定义通信协议啊?
bmp 宽度必须是 4 字节 的整数倍 , 不够的要补齐.
你这里:
width%2 =0 或 1;
width奇数+1=偶数
width偶数+0=偶数这样 width 一定是2的倍数,也就是 一定是4的倍数.[(i*pitch+j)*2];//?????
就是计算 地址
i*pitch 高*宽; +当前宽;*2 是16位
我记不清楚了 好像 NT 是要求 WORD , 通常 要求4的倍数.
width=13,按它这个写法pitch=width+width%2 =14,14就不是4的倍数
(width+4) & 0xfffffffC
{
int pitch=width+width%2;
for(int i=0;i<height;i++)
{
for(int j=0;j<width;j++)
{
short int a = (short int)buffer[(i*pitch+j)/8];//
if(a != 0)
{
pbMap[(height - i -1)*width+ j] = 1;//这里应该怎么设置
}
}
}
}请问下,如果处理二值图pbMap[(height - i -1)*width+ j] = 1;这里应该怎么设置?
if(a != 0)
{
pbMap[(height - i -1)*width+ j] = 1;// 8位 都==1?
}
{
pbMap[i*pitch+j]= a ;//这里应该怎么设置
}
HBITMAP hBmp = CreateDIBSection(hMemDC, &bmpinfo, DIB_RGB_COLORS, 0, NULL, 0);
// second GetDIBits call to make DIB
LPBYTE lpImage = (LPBYTE) new char[m_dwSizeImage];
VERIFY(::GetDIBits(pDC->GetSafeHdc(), hBitmap, 0, (UINT) lpBMIH->biHeight,
lpImage, (LPBITMAPINFO) lpBMIH, DIB_RGB_COLORS));不要那个pbMap