现在能收到jpg格式的数据流,pbtyeImage以及数据流的长度size.
知道能够通过文件保存和读取的方式进行转换。
CxImage image(pbtyeImage,size,CXIMAGE_FORMAT_JPG);
image.save("c:\\1.bmp",CXIMAGE_FORMAT_JPG);
但是不想走文件保存和读取的方式,希望直接将jpg格式的数据流直接转换成bmp格式的数据流,如何处理?

解决方案 »

  1.   

    CxImage image(pbtyeImage,size,CXIMAGE_FORMAT_JPG);
    HBITMAP hbmp = image.MakeBitmap();
      

  2.   

    之后如何转出bmp的数据流呢?
    BYTE *pBmpBuffer = new BYTE[size];
    image.Decode(pBmpBuffer,size,CXIMAGE_FORMAT_BMP);
    调用这个函数,得到的pBmpBuffer为空。
      

  3.   

    long file_size(FILE* pFile)
    {
    long pos,prev;
    prev=ftell(pFile);
    if(prev<0)
    return 0;
    if(fseek(pFile,0,SEEK_END))
    return 0;
    pos=ftell(pFile);
    if(pos<0)
    return 0;
    if(fseek(pFile,prev,SEEK_SET))
    return 0;
    return pos;
    }
    //从文件filename中读入内容到*strout中,返回大于0(读入字节数)表示全部读入成功,
    //并在内部会malloc,文件空时返回0
    size_t read_text(unsigned char** strout, const char* filename)
    {
    size_t read, size;
    unsigned char* str; FILE* infile;
    infile = fopen(filename, "rb");
    if (NULL==infile)
    return 0;
    size = file_size(infile);
    if(0==size)
    {
    fclose(infile);
    return 0;
    }
    str = (unsigned char *)malloc(size);
    if(NULL==str)
    {
    fclose(infile);
    return 0;
    }
    read = fread(str, 1, size, infile);
    fclose(infile); if(read != size)
    {
    free(str);
    return 0;
    }
    *strout = str;
    return size;
    }
    //把size大小的strin写入文件filename中,返回成功与否
    bool write_text(const unsigned char* strin, size_t size, const char* filename)
    {
    size_t write;
    FILE * outfile;
    outfile = fopen(filename, "wb");
    if (NULL==outfile)
    return false;
    write = fwrite(strin, 1, size, outfile);
    fclose(outfile);
    if(write != size)
    return false;
    return true;
    }
    ///////////////////////////
    int main()
    {
    size_t           sz = 0 ;
    unsigned char *  jpg = 0 ;
    BYTE *           bmp = 0 ;
    long             bmpsz = 0 ;
    if( 0 == (sz = read_text(&jpg,"Test.jpg")))
    return -1;
    CxImage img(jpg, sz, CXIMAGE_FORMAT_JPG);
    free(jpg);
    if(img.Encode(bmp, bmpsz, CXIMAGE_FORMAT_BMP))
    {
    write_text(bmp, bmpsz, " Test.bmp");
    free(bmp);
    }
    return 0;
    }
      

  4.   

    谢谢,之前写的时候,也是调用img.Encode(bmp, bmpsz, CXIMAGE_FORMAT_BMP)。但是bmp初始的时候,设定了长度,当时初始bmp时。BYTE *bmp = new BYTE[SIZE].这个size是jpg数据流的大小,所以没有得到。现在按照帖子上说的,就可以了。因为转换出来的bmp大小和jpg大小不一样。