RT,应用于MFC的程序,谁有相关算法,分不够可以增加。

解决方案 »

  1.   

    bmp的无损压缩算法主要是BI_RLE8和BI_PNG
    BI_RLE8 google一下可以找到压缩解压的源码
    BI_PNG直接使用pnglib就好了
      

  2.   

    保存为PNG、TGA\PCX之类的格式就可以。
      

  3.   

    Open CV 啊,想怎么压?压缩成JPG吗?都可以.. 有库的
      

  4.   

    如果是jpg格式的,cximage或者opencv都可以按照你的意思进行压缩,但是都是有损压缩
      

  5.   

    zip肯定是无损的 , zlib啊。开源的。随便用。
      

  6.   

    直接用PNG了,一步到位,压缩率高,当然无损了。
    GDI+或者libpng都支持的、ImageMagik之类的图像处理库也能用。
      

  7.   

    就是用于通讯,让压缩尽量小点压缩的就是bmp文件,可以不包含bmp头文件最好有压缩和解压缩的代码谢谢  
    网上下了一些,但都没有实现
      

  8.   


    IStream* CDXGraph::StretchPic(const WCHAR *path, const WCHAR *format, int width, int heigh)
    {
    Bitmap orgpic(path) ;  
    Image *Despic = orgpic.GetThumbnailImage(width,heigh) ;  

    IStream* pstm = NULL;   

    CLSID encoderClsid ;  
    GetEncoderClsid(format,&encoderClsid) ;  
    CString name;

    name = "Debug\\1.bmp";

    Status sta =Despic->Save(name.AllocSysString(),&encoderClsid,0) ; //Despic->Save(pstm, &encoderClsid,0);  
    if (sta == Ok)  
    {  
    return pstm ;  
    }  
    return NULL ;  
    }int CDXGraph::GetEncoderClsid(const WCHAR *format, CLSID *pClsid)
    {
    UINT num = 0; // number of image encoders  
    UINT size = 0; // size of the image encoder array in bytes  
    ImageCodecInfo* pImageCodecInfo = NULL;  
    GetImageEncodersSize(&num, &size);  
    if(size == 0)  
    return -1; // Failure  
    pImageCodecInfo = (ImageCodecInfo*)(malloc(size));  
    if(pImageCodecInfo == NULL)  
    return -1; // Failure  
    GetImageEncoders(num, size, pImageCodecInfo);  
    for(UINT j = 0; j < num; ++j)  
    {  
    if( wcscmp(pImageCodecInfo[j].MimeType, format) == 0 )  
    {  
    *pClsid = pImageCodecInfo[j].Clsid;  
    free(pImageCodecInfo);  
    return j; // Success  
    }  
    }  
    free(pImageCodecInfo);  
    return -1;   
    }调用方法
    StretchPic(L"1.bmp",L"image/bmp",200,200)
      

  9.   

    1>e:\vs2005 code\testrar\testrar\testrardlg.cpp(461) : error C2065: “Bitmap”: 未声明的标识符
    1>e:\vs2005 code\testrar\testrar\testrardlg.cpp(461) : error C2146: 语法错误 : 缺少“;”(在标识符“orgpic”的前面)
    1>e:\vs2005 code\testrar\testrar\testrardlg.cpp(461) : error C3861: “orgpic”: 找不到标识符
    1>e:\vs2005 code\testrar\testrar\testrardlg.cpp(462) : error C2065: “Image”: 未声明的标识符
    1>e:\vs2005 code\testrar\testrar\testrardlg.cpp(462) : error C2065: “Despic”: 未声明的标识符
    1>e:\vs2005 code\testrar\testrar\testrardlg.cpp(462) : error C2228: “.GetThumbnailImage”的左边必须有类/结构/联合
    1>        类型是“'unknown-type'”
    1>e:\vs2005 code\testrar\testrar\testrardlg.cpp(470) : error C2065: “Status”: 未声明的标识符
    1>e:\vs2005 code\testrar\testrar\testrardlg.cpp(470) : error C2146: 语法错误 : 缺少“;”(在标识符“sta”的前面)
    1>e:\vs2005 code\testrar\testrar\testrardlg.cpp(470) : error C2065: “sta”: 未声明的标识符
    1>e:\vs2005 code\testrar\testrar\testrardlg.cpp(470) : error C2227: “->Save”的左边必须指向类/结构/联合/泛型类型
    1>        类型是“'unknown-type'”
    1>e:\vs2005 code\testrar\testrar\testrardlg.cpp(471) : error C2065: “Ok”: 未声明的标识符
    1>e:\vs2005 code\testrar\testrar\testrardlg.cpp(482) : error C2065: “ImageCodecInfo”: 未声明的标识符
    1>e:\vs2005 code\testrar\testrar\testrardlg.cpp(482) : error C2065: “pImageCodecInfo”: 未声明的标识符
    1>e:\vs2005 code\testrar\testrar\testrardlg.cpp(483) : error C3861: “GetImageEncodersSize”: 找不到标识符
    1>e:\vs2005 code\testrar\testrar\testrardlg.cpp(486) : error C2059: 语法错误 : “)”
    1>e:\vs2005 code\testrar\testrar\testrardlg.cpp(489) : error C3861: “GetImageEncoders”: 找不到标识符
    1>e:\vs2005 code\testrar\testrar\testrardlg.cpp(492) : error C2228: “.MimeType”的左边必须有类/结构/联合
    1>e:\vs2005 code\testrar\testrar\testrardlg.cpp(494) : error C2228: “.Clsid”的左边必须有类/结构/联合
      

  10.   

    LZ误导, 用于传输, ZIP就可以了, BMP的压缩算法, 是压缩后可以直接用画图打开的. 跟ZIP之类用处不同.
      

  11.   


    也许是我说的不清楚我其实就是要一个压缩算法,传输然后在解压缩ZIP网上下载的都没有实现  不知道你做过没有
      

  12.   

    我以为LZ的是VC6.0的MFC呢,没想到是VS2005,我的是在VC6.0上编译通过
      

  13.   

    从网上下载了CZip的压缩与解压缩 但都是生成的文件我目的是用于传输,要压缩与解压后的二进制数据就行  自己试着写了一下,错误比较多 我现在是MFC的Unicode编码,不知道哪位大侠以前做过这方面的