LPBYTE lpBits;
lpBits=new unsigned char[nWidth*nHeight];
         .......lpBits中包含一副nWidth*nHeight大小的灰度图像数据,
我想把它写到一个文本文件result.txt中去 CString cFile = GetWorkDir(NULL);//一个函数得到当前工作路径

         cFile += "result.txt";

         CFile f;

         CFileException e;
 
if(!f.Open(cFile,CFile::modeCreate|CFile::modeReadWrite ,&e)) f.Write(lpBits,nWidth*nHeight);
  f.Close();显示结果好像是ASCII码,如何正确显示灰度值(0-255)?
我想每写完一行(nWidth)就输出一个换行符,
这样能按图像的排列显示,这个怎么实现?

解决方案 »

  1.   

    针对nWidth, nHeight做两重for循环,中间可以写入换行.逐个数据转换成你要的格式写入文件.
      

  2.   

    因为用 Write 是进制流 写文件
      

  3.   

    不要使用 write 成员,
    一个一个数据写入文件,
    用两个 for 遍历数组 写文件
      

  4.   

    LPBYTE pBuffer;
    pBuffer=new unsigned char[4];
    for(x=0;x<nWidth;x++)
    {
    for(int y=0;y<nHeight;y++)
    {
    for(int n=0;n<3;n++)
    {
    *(pBuffer+2-n)=*(lpBits+y*10+x) % 10 +48;
    *(lpBits+y*10+x)=*(lpBits+y*10+x)/10; } if(y<nHeight)
    {
                      *(pBuffer+3)=32; }
    else
    {
    *(pBuffer+3)=10;
    }
                        
    f.Write(pBuffer,4); }
    }
      

  5.   

    按两位的意思改的,有点效果,换行没实现//先申请了一段缓冲区,用于存放3位整数和一个空格
              LPBYTE pBuffer;
    pBuffer=new unsigned char[4];
    for(x=0;x<nWidth;x++)
    {
    for(int y=0;y<nHeight;y++)
    {
    for(int n=0;n<3;n++)
    {
                                         //将灰度值取余并将Ascii转换成10进制数
    *(pBuffer+2-n)=*(lpBits+y*10+x) % 10 +48;
                                        //灰度值右移一位
    *(lpBits+y*10+x)=*(lpBits+y*10+x)/10; } if(y<nHeight)
    {
                      *(pBuffer+3)=32; //空格的Ascii }
    else
    {
    *(pBuffer+3)=10;//这里我想输入换行 可是没实现?!
    }
                        
                                     f.Write(pBuffer,4); }
    }
    这个方法好像有点笨吧整数还行,要是小数或者位数未知的一个数据怎么输出啊?!幸好知道灰度值也就在(0-255)之间大家看看有没有别的方法,再是换行怎么整啊?