听说通过读取图像的二维数组来读取图像的象素坐标?具体怎么读啊?刚接触,谢谢了.能否有代码看啊?
解决方案 »
- 如何加载不同目录下的DLL
- 关于释放资源的小问题。高手帮忙看看。。
- 为什么删一个变量都这么的难啊。
- AfxBeginThread创建新ui线程,为什么ExitInstance不调用,构析函数也不调用
- 为什么在Visual C++里用不了inet_aton?
- visual c++ 编译器不出现任何提示信息,请问是怎么回事?
- listCtrl的小问题,大家帮忙看看
- error LNK2001: unresolved external symbol _main; fatal error LNK1120: 1 unresolved externals
- 关于回吊函数的问题
- 稍等,请给点心德。
- 请问CString的问题
- 一个用picture控件显示图片的问题,请各位大侠指点!
void DisplayDibHeaders (HWND hwnd, TCHAR * szFileName)
{
BITMAPFILEHEADER bf;
BITMAPINFOHEADER bi;
DWORD ImgWidth = 0,ImgHeight = 0;//位图的宽度与高度
DWORD i,j;
DWORD count1 = 0,count2 = 0;
DWORD dwFileStart;
HFILE hf;
BYTE * pBits;
int nBitsSize;
bool tag = false;
const DWORD N = 512;
static TCHAR *szBuffer;
HGLOBAL hImgData = NULL; if((hf = _lopen(szFileName,OF_READ)) == HFILE_ERROR)
{
MessageBox(hwnd,TEXT("文件打开失败!"),TEXT("Warning!"),MB_OK|MB_ICONEXCLAMATION);
return ;
}
Printf (hwnd, TEXT ("\r\n\t打开的文件名为:%s\r\n"), szFileName) ;
_lread(hf,(LPVOID)&bf,sizeof(BITMAPFILEHEADER));
_lread(hf,(LPVOID)&bi,sizeof(BITMAPINFOHEADER));
dwFileStart = 0;
nBitsSize = bf.bfSize - bf.bfOffBits;
pBits = (BYTE *)malloc(nBitsSize*N);////申请内存块
if(!pBits)
{
MessageBox(hwnd,TEXT("内存分配错误!"),TEXT("警告!"),MB_OK|MB_ICONEXCLAMATION);
_lclose(hf);
}
//改变鼠标形状为等待
SetCursor (LoadCursor (NULL, IDC_WAIT)) ;
ShowCursor (TRUE) ;
_llseek(hf,dwFileStart + bf.bfOffBits,SEEK_SET);
_lread(hf,pBits,nBitsSize);
ShowCursor (FALSE) ;
SetCursor (LoadCursor (NULL, IDC_ARROW)) ;
Printf (hwnd, TEXT ("左面坐标像素显示如下:\r\n"));
for(j = 0;j < N;j++)
for(i = 0;i < 256;i++)
{
if(*(pBits+i+j*256) != 0 && *(pBits+i+j*256+1) == 0)
{/*位图像素坐标为 = */
Printf (hwnd, TEXT ("{%d,%d},"),j-256,2*((i+j*256)%256+1)-256);
count1 ++;
tag = true;
}
else
Printf (hwnd, TEXT (""));
}
Printf (hwnd, TEXT ("\r\n左面坐标点共有 = %d个\r\n"),count1);
Printf (hwnd, TEXT ("右面坐标像素显示如下:\r\n"));
for(j = 0;j < N;j++)
{
for(i = 0;i < 256;i++)
{
if(*(pBits+i+j*256) == 0 && *(pBits+i+j*256+1) != 0)
{/*\t位图像素坐标为 = */
Printf (hwnd, TEXT ("{%d,%d},"),j-256,2*((i+j*256)%256)+1-256);
count2 ++;
tag = true;
}
else
Printf (hwnd, TEXT (""));
}
}
Printf (hwnd, TEXT ("\r\n右面坐标点共有 = %d个"),count2);
if(!tag)
MessageBox(hwnd,TEXT("该行不存在符合条件的坐标!"),TEXT("提示"),MB_OK|MB_ICONEXCLAMATION);
_lclose(hf);
return ;
}
但是我但是读取的是黑白色的位图资源~~
但是修改一下代码就可以读取其他颜色的位图,包含256真彩色的位图等~~~
cstring str;
str="文件名.bmp";
image=auxDIBImageLoad(str);//获得bmp图像数据
unsigned char *data1;
data1=m_image->data;//*data1表示向素值
m_width=m_image->sizeX;//图像宽
m_height=m_image->sizeY;//高
接下来可根据图像宽和高建立二维数组,读取向素值
读取顺序是从图像的左下角开始,向右读到最后一个像素,再读上一行