听说通过读取图像的二维数组来读取图像的象素坐标?具体怎么读啊?刚接触,谢谢了.能否有代码看啊?

解决方案 »

  1.   

    我曾经写过一个,你看看对你有没有帮助~~~
    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真彩色的位图等~~~
      

  2.   

    struct _AUX_RGBImageRec *image;
    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;//高
    接下来可根据图像宽和高建立二维数组,读取向素值
    读取顺序是从图像的左下角开始,向右读到最后一个像素,再读上一行
      

  3.   

    能否再问一下,为什么那个printf说是没有声明呢?你是在MFC下面编的程序吗