我的图像数据是遥感数据是*.dat格式的,里面是图像灰度的数据矩阵,8位为的,对了,数据中每行间隔中间可能有很多空格,这个我将数据读取在命令提示符输出时看到的。这个图像矩阵数据是大小有5733*6807这么大,我想建立一个简单的MFC程序将读取的数据显示出来。
    我刚开是是利用FILE来读取图像数据,然后利用SetPixel()函数来显示图像,这个方法可以显示
但这个图像太大了,只能显示小部分,不能完全看到图像什么样子,所以想通过其他方法
下面的是我想先通过构建位图对象,通过CreateDIbSection()函数,然后缩放显示StretchBlt()。在Doc类头文件中中我定义了
FILE *fp;
BYTE by[5736][6808]或**by;定义比那大几个像素是为了使行和列是DWORD的整数倍而增加几位不知道这样对不,;
在Doc类中,我用OnOpenDocument()来读取图像数据
BOOL CShowRemoteDoc::OnOpenDocument(LPCTSTR lpszPathName)
{
    
if((fp = fopen(lpszPathName,"rb")) == NULL) //图像数据是二进制的
{
return FALSE;
} for(int i=0; i<5736; i++)
for(int j=0; j<6808; j++)
{  
if((i>3) && (j>1))  //这个是把我增加的几个像素行列除外读取数据
{
by[i][j] = fgetc(fp);  //读取图像数据
if(by[i][j] == 32)    //如果读取的是空格
by[i][j] = 0;         //将这点变为黑的
}
else by[i][j] = 0;             将增加的行列像素也为黑
}
return FALSE;
}上面的程序应该是可以的,但不知道还有没有其他更快的读取方法。接下来是显示部分了
我在VIEW类的OnDraw()函数中
我的想法是通过上面读取的图像数据构建一个位图数据块通过CreateDIBSection()来构建一个HBITMAP对象,然后用StretchBlt(),因为图像太大,所以缩放一下,不知道这个想法是否对,我是这么做得,void CShowRemoteView::OnDraw(CDC* pDC)
{
CShowRemoteDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here CDC dcMemory;
BITMAPINFO *pbi;       //定义位图信息 BYTE **addr,*pMem;
pMem = (BYTE *)malloc(sizeof(BITMAPINFOHEADER)+5736*6808);//为位图分配内存空间
pbi = (BITMAPINFO *)pMem;                                 //指向位图信息结构
pbi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);         //设定位图信息头
pbi->bmiHeader.biHeight = 5736;
pbi->bmiHeader.biWidth =6808;
pbi->bmiHeader.biPlanes = 1;
pbi->bmiHeader.biBitCount = 8;
pbi->bmiHeader.biCompression = BI_RGB;//       创建位图数据块
HBITMAP hBmp = CreateDIBSection(NULL, pbi,DIB_RGB_COLORS,(void **)addr,NULL,0);
if(hBmp == NULL)
{
MessageBox("can not construct hBmp","error",MB_OK);
return ;
}
else
{
MessageBox("success to construct hBmp","right",MB_OK);
addr = pDoc->by;
BITMAP BM;
GetObject(hBmp,sizeof(BITMAP),&BM); dcMemory.CreateCompatibleDC(NULL);
dcMemory.SelectObject(hBmp); CRect rect;
GetClientRect(&rect); pDC->StretchBlt(rect.left,rect.top,rect.right,rect.bottom,&dcMemory,0,0,5736,6808,SRCCOPY);
}上面的程序调试后,出现一条错误addr = pDoc->by;就是这句
说rror C2440: '=' : cannot convert from 'unsigned char [5736][6808]' to 'unsigned char ** '
        Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
这个指传递要怎么弄,二维数据到指针的指针,我本来还想利用循环一个一个复制呢,晕死还有就是上面利用的方法来简单的显示这么大的图像数据是否可行,不行的话,能否指点一下其他的方法,谢谢