现在能收到jpg格式的数据流,pbtyeImage以及数据流的长度size.
知道能够通过文件保存和读取的方式进行转换。
CxImage image(pbtyeImage,size,CXIMAGE_FORMAT_JPG);
image.save("c:\\1.bmp",CXIMAGE_FORMAT_JPG);
但是不想走文件保存和读取的方式,希望直接将jpg格式的数据流直接转换成bmp格式的数据流,如何处理?
知道能够通过文件保存和读取的方式进行转换。
CxImage image(pbtyeImage,size,CXIMAGE_FORMAT_JPG);
image.save("c:\\1.bmp",CXIMAGE_FORMAT_JPG);
但是不想走文件保存和读取的方式,希望直接将jpg格式的数据流直接转换成bmp格式的数据流,如何处理?
HBITMAP hbmp = image.MakeBitmap();
BYTE *pBmpBuffer = new BYTE[size];
image.Decode(pBmpBuffer,size,CXIMAGE_FORMAT_BMP);
调用这个函数,得到的pBmpBuffer为空。
{
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;
}