之前在VS上用CImage可以做,因为要移植到一个VC6开发环境的程序上,所以用了VC6。结果发现,VC6没有CImage的支持库,求教一下该怎么做?做相机开发的,用的佳能的edsdk。

解决方案 »

  1.   


    使用OpenCV库
      

  2.   

    cimage是atl库里的,把vs中这部分的库单独提出来,放到vc6里试试,如果不行就只能用位图来处理图片了,不知道你是要用cimage做些什么事情~
      

  3.   

    cimage 用的是 GDI+ , 
      

  4.   

    6.0也可以用CImage
    https://zhidao.baidu.com/question/90869560.html
      

  5.   

    求教一下把数据流转换成位图应该怎么做?能不能给个代码示例,
    数据流是只以二进制方式加载的数据流么
     FILE *fp=NULL; 
        int ret = fopen_s(&fp,"D:\\11.bmp","rb"); 
        if(fp==0)    
        { 
            return ; 
        } 
        BITMAPFILEHEADER fileheader={0}; 
        fread(&fileheader,sizeof(fileheader),1,fp); 
        if(fileheader.bfType!=0x4D42) 
        { 
            fclose(fp); 
            return ; 
        } 
     
        BITMAPINFOHEADER head; 
        fread(&head,sizeof(BITMAPINFOHEADER),1,fp);  
        long bmpWidth = head.biWidth; 
        long bmpHeight = head.biHeight; 
        WORD biBitCount = head.biBitCount; 
        if(biBitCount != 24) 
        { 
            ::AfxMessageBox(_T("请选择24位位图!")); 
            fclose(fp); 
            return ; 
        } 
     
        int totalSize = (bmpWidth *biBitCount/8+3)/4*4*bmpHeight; 
        BYTE *pBmpBuf = new BYTE[totalSize]; 
        size_t size = 0; 
        while(true) 
        { 
            int iret = fread(&pBmpBuf[size],1,1,fp); 
            if(iret == 0) 
                break; 
            size = size + iret; 
        } 
        fclose(fp); 
     
        int i,j; 
        CClientDC dc(this); 
        int pitch=bmpWidth%4; 
        for(i=0;i<bmpHeight;i++) 
        { 
            int realPitch=i*pitch; 
            for(j=0;j<bmpWidth;j++) 
            { 
                dc.SetPixel(j,i,RGB( 
                    pBmpBuf[(i*bmpWidth+j)*3+2+realPitch], 
                    pBmpBuf[(i*bmpWidth+j)*3+1+realPitch], 
                    pBmpBuf[(i*bmpWidth+j)*3+realPitch])); 
            } 
        } 
    delete [] pBmpBuf;     pBmpBuf = NULL;
        return ; 
      

  6.   

    求教一下把数据流转换成位图应该怎么做?能不能给个代码示例,
    数据流是只以二进制方式加载的数据流么
     FILE *fp=NULL; 
        int ret = fopen_s(&fp,"D:\\11.bmp","rb"); 
        if(fp==0)    
        { 
            return ; 
        } 
        BITMAPFILEHEADER fileheader={0}; 
        fread(&fileheader,sizeof(fileheader),1,fp); 
        if(fileheader.bfType!=0x4D42) 
        { 
            fclose(fp); 
            return ; 
        } 
     
        BITMAPINFOHEADER head; 
        fread(&head,sizeof(BITMAPINFOHEADER),1,fp);  
        long bmpWidth = head.biWidth; 
        long bmpHeight = head.biHeight; 
        WORD biBitCount = head.biBitCount; 
        if(biBitCount != 24) 
        { 
            ::AfxMessageBox(_T("请选择24位位图!")); 
            fclose(fp); 
            return ; 
        } 
     
        int totalSize = (bmpWidth *biBitCount/8+3)/4*4*bmpHeight; 
        BYTE *pBmpBuf = new BYTE[totalSize]; 
        size_t size = 0; 
        while(true) 
        { 
            int iret = fread(&pBmpBuf[size],1,1,fp); 
            if(iret == 0) 
                break; 
            size = size + iret; 
        } 
        fclose(fp); 
     
        int i,j; 
        CClientDC dc(this); 
        int pitch=bmpWidth%4; 
        for(i=0;i<bmpHeight;i++) 
        { 
            int realPitch=i*pitch; 
            for(j=0;j<bmpWidth;j++) 
            { 
                dc.SetPixel(j,i,RGB( 
                    pBmpBuf[(i*bmpWidth+j)*3+2+realPitch], 
                    pBmpBuf[(i*bmpWidth+j)*3+1+realPitch], 
                    pBmpBuf[(i*bmpWidth+j)*3+realPitch])); 
            } 
        } 
    delete [] pBmpBuf;     pBmpBuf = NULL;
        return ; 才发现数码相机采集的数据流格式是JPEG的,郁闷
      

  7.   

    求教一下把数据流转换成位图应该怎么做?能不能给个代码示例,
    数据流是只以二进制方式加载的数据流么
     FILE *fp=NULL; 
        int ret = fopen_s(&fp,"D:\\11.bmp","rb"); 
        if(fp==0)    
        { 
            return ; 
        } 
        BITMAPFILEHEADER fileheader={0}; 
        fread(&fileheader,sizeof(fileheader),1,fp); 
        if(fileheader.bfType!=0x4D42) 
        { 
            fclose(fp); 
            return ; 
        } 
     
        BITMAPINFOHEADER head; 
        fread(&head,sizeof(BITMAPINFOHEADER),1,fp);  
        long bmpWidth = head.biWidth; 
        long bmpHeight = head.biHeight; 
        WORD biBitCount = head.biBitCount; 
        if(biBitCount != 24) 
        { 
            ::AfxMessageBox(_T("请选择24位位图!")); 
            fclose(fp); 
            return ; 
        } 
     
        int totalSize = (bmpWidth *biBitCount/8+3)/4*4*bmpHeight; 
        BYTE *pBmpBuf = new BYTE[totalSize]; 
        size_t size = 0; 
        while(true) 
        { 
            int iret = fread(&pBmpBuf[size],1,1,fp); 
            if(iret == 0) 
                break; 
            size = size + iret; 
        } 
        fclose(fp); 
     
        int i,j; 
        CClientDC dc(this); 
        int pitch=bmpWidth%4; 
        for(i=0;i<bmpHeight;i++) 
        { 
            int realPitch=i*pitch; 
            for(j=0;j<bmpWidth;j++) 
            { 
                dc.SetPixel(j,i,RGB( 
                    pBmpBuf[(i*bmpWidth+j)*3+2+realPitch], 
                    pBmpBuf[(i*bmpWidth+j)*3+1+realPitch], 
                    pBmpBuf[(i*bmpWidth+j)*3+realPitch])); 
            } 
        } 
    delete [] pBmpBuf;     pBmpBuf = NULL;
        return ; 才发现数码相机采集的数据流格式是JPEG的,郁闷
    那就自己转一下呗,网上有很多例子吧~