最好读取PCX也可以,不过只可读BMP也可以。

解决方案 »

  1.   

    http://www.vckbase.com/document/viewdoc/?id=674
    位图文件读写综述
      

  2.   

    我是楼主:
        
        更正一下问题,不读bmp了,只读PCX。
        怎样用VC读取PCX图象每个象素的值?
      

  3.   

    在网上找到一个方法,但不知道他的参数怎么搞。
    方法如下:========================================================
    /****************************************************************************
    * 函数名称:LoadPCXLine(PPCXHEAD ppcxHdr, LPBYTE ppcxImg, LPBYTE ppcxBits) const
    *
    * 参数:PPCXHEAD ppcxHdr -指向PCXHEAD结构的指针!NULL,导入BitPlane,BytePerLine,=>clScanLineSize
    * LPBYTE ppcxImg -指向PCX图象区指针!NULL,RLE压缩编码,位置递增+=rec。
    *     调用之前获得首地址指针: 
    * LPBYTE ppcxBits -指向DIB数据区的指针,按扫描行(scanline)长度递增
    *
    * 返回:UINT rec -返回每行解压以后的字节数目
    *
    * 说明:根据PCX图象数据指针,对RLE进行解码
    ****************************************************************************/
    UINT CPcxImage::LoadPCXLine(PPCXHEAD ppcxHdr, LPBYTE ppcxImg, LPBYTE ppcxBits) const
    {
     ASSERT(ppcxHdr!=NULL&&ppcxImg!=NULL&&ppcxBits!=NULL); // because in bitmap bits order, it's blue=>green=>red
     // however pcx is red=>green=>blue so use decrease order
     //-----------------------------------------
     UINT lPos(0),  // 记录存入ppcxBits的总数
       iX(0), // 记录每个位平面字节序号
       rec(0); // 读取_ppcxImg_ 字节序号
     for ( int bp=ppcxHdr->BitPlane-1; bp >= 0;  bp-- )
     {
      // RLE 解码=======
      iX=0;
      
      while ( iX<ppcxHdr->BytePerLine )
      {
       BYTE uiValue = ppcxImg[rec++];
       if ( (uiValue & 0xc0) == 0xc0 )  // 判断高位字节是否设置 0xc0
       {
        uiValue = uiValue & 0x3f ;  // 计算重复
        BYTE Color = ppcxImg[rec++]; // 提取颜色
        
        // 存放到内存DIB
        for ( BYTE bRepeat=0; bRepeat < uiValue; bRepeat++ )
        {
         ppcxBits[(iX++)*ppcxHdr->BitPlane+bp] = Color;
         lPos++;
        }
       }
       else
       {
        ppcxBits[(iX++)*ppcxHdr->BitPlane+bp] = uiValue;
        lPos++;
       }
      }
      
     } return rec;
    }/////////////////////程序完////////////////////////我是楼主:
    以下这三个参数怎么实现?对指向文件的指针不熟悉。PPCXHEAD ppcxHdr -指向PCXHEAD结构的指针!NULL,导BitPlane,BytePerLine,=>clScanLineSize
    * LPBYTE ppcxImg -指向PCX图象区指针!NULL,RLE压缩编码,位置递增+=rec。
    * 调用之前获得首地址指针: 
    * LPBYTE ppcxBits -指向DIB数据区的指针,按扫描行(scanline)长度递增
    先谢了!!
      

  4.   

    这个LoadPCXLine应该是不全的呀
      

  5.   

    是不全 不过今天自己搞店了 唉 感觉CSDN主要是用来灌水的  不过也难怪 谁还想休息时间忙这些
      

  6.   

    bmp格式的图是DIB位图,也就是设备无关位图.
    DIB位图文件结构如下:
        ___________________________________
        | 位图文件头结构BITMAPFILEHEADER  |
        -----------------------------------
        |  位图信息头结构BITMAPINFOHEADER |
        -----------------------------------
        |  位图颜色表RGBQUAD              |
        -----------------------------------
        | 位图象素数据                    |
        -----------------------------------
    希望对你有用.