大家好!我是新来的,由于编程基础比较弱,但是现在需要用VC来实现读取显示.img的文件,就是envi的标准格式的图像,在网上找了好多都找不到,请问能帮一下忙如何实现吗?

解决方案 »

  1.   

    .img 是纯二进制文件,只需用基本的fopen()打开就行了,读取时用.hdr文件里samples,bands,lines的数据算一下要一次读多少字节。显示时要注意.img文件的灰度级不是256级,为显示效果好,先调整一下灰度级。
      

  2.   

    void CReadDatView::ReadDatFile()
    {
    int i,j;
    CFileDialog dlg(TRUE, ".*", NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
    "All Files(*.*)|*.*||",NULL);
    CString FileName;
    if(dlg.DoModal()==IDOK)
    {  
           FileName=dlg.GetFileName();
       CFile file(FileName,CFile::typeBinary|CFile::modeRead);//|
           length=file.GetLength();
       length=(int)ceil(sqrt(length));
       Image=new BYTE*[length];
       for(i=0;i<length;i++)
         Image[i]=new BYTE[length];
       for(i=0;i<length;i++)
           for(j=0;j<length;j++)
       {
       file.Read(&Image[i][j],sizeof(BYTE));
       }
       file.Close();
       Draw=FALSE;
    }
    else{return;}
    }
    自己加个菜单项,调用这个函数就行,在OnDraw()
    利用这个显示
    void CReadDatView::OnDraw(CDC* pDC)
    {
    CReadDatDoc* pDoc = GetDocument();
    ASSERT_VALID(pDoc);
    // TODO: add draw code for native data here
    int i,j;
        //显示解码后图像
        if(!Draw)

    for(i=0;i<length;i++)
    for(j=0;j<length;j++)
    {  
       BYTE tmp=Image[j][i];////
       pDC->SetPixel(i,j,RGB(tmp,tmp,tmp));
    }
         if(Image2)
     { for(i=0;i<length;i++)
    for(j=0;j<length;j++)
    {  
       BYTE tmp=Image2[j][i];////
       pDC->SetPixel(i+513,j,RGB(tmp,tmp,tmp));
    }
     }
     }
    }
    Draw为布尔变量void CReadDatView::OnOpenDat() 
    {
    // TODO: Add your command handler code here
        ReadDatFile();
    Invalidate();//使窗口无效
    }//菜单项调用
      

  3.   

    请问楼主你有没有实现VC读取.img文件的程序呢?能不能教我下,谢谢
      

  4.   

    请问3楼的朋友,那个image2是什么玩意?