使用CxImage转换jpg到bmp出现的问题

lightning_wu 2010-12-10 09:25:01
CxImage中,可以使用两种方式将jge转化为bmp。
第一种使用文件保存形式
CxImage image = new CxImage(pBytes,size,CXIMAGE_FORMAT_JPG);
imgae.save("c:\\1.bmp",CXIMAGE_FORMAT_BMP);
第二种方式为内存中数据转换。
BYTE *bmp = NULL;
long bmpsize = 0;
CxImage image = new CxImage(pBytes,size,CXIMAGE_FORMAT_JPG);
image.Encode(bmp,bmpsize,CXIMAGE_FORMAT_BMP);
得到的bmp为bmp格式的数据流。

问题,使用图形库MIL调用时,能够正常显示以文件形式保存的BMP。但是使用内存bmp时,显示的是全黑的图形。请问这两种方式得到的bmp数据会不一样吗?现在要使用第二种方式进行开发,以文件保存的方式安全性太差。
...全文
223 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
lightning_wu 2010-12-10
  • 打赏
  • 举报
回复
谢谢hastings,结贴
hastings 2010-12-10
  • 打赏
  • 举报
回复
image.DecreaseBpp(8,false);
对MIL库不清楚 - -
lightning_wu 2010-12-10
  • 打赏
  • 举报
回复
hastings,能留个qq号吗?
调用库函数(非CxImage)怎么读取的?
读取方式也是两种,一种是读文件路径,一种是读内存。
MIL库文件路劲时,能正常显示。
读取内存时,就是黑的。
怀疑是没有转换位深度。但是CxImage保存文件和读内存。都是24位的位深度。没理由一个能显示一个不能的。

hastings,使用CxImage如何转换BMP的位深度啊,由24位转换成8位
hastings 2010-12-10
  • 打赏
  • 举报
回复
两种格式是一样的~~

void testjpg()
{
unsigned char * jpg = 0 ;
BYTE * bmp = 0 ;
long bmpsize = 0 ;
size_t read = read_text(&jpg, "jpg.jpg");
if(!read)
return;
CxImage image(jpg,read,CXIMAGE_FORMAT_JPG);
free(jpg);
image.Save("bmp1.bmp",CXIMAGE_FORMAT_BMP);
if(image.Encode(bmp,bmpsize,CXIMAGE_FORMAT_BMP))
{
write_text(bmp,bmpsize,"bmp2.bmp");
free(bmp);
}
}
void compare(const char * filename1, const char * filename2)
{
unsigned char * str1 = 0, * str2 = 0 ;
size_t read1(0), read2(0);
read1 = read_text(&str1, filename1);
read2 = read_text(&str2, filename2);
if(!read1 || !read2 || read1 != read2)
{
free(str1);
free(str2);
cout<<"size not same\n";
return;
}
if(memcmp(str1,str2,read1) == 0)
cout<<"the two file is same\n";
else
cout<<"memory not same\n";
free(str1);
free(str2);
}
int main(int argc, char* argv[])
{
testjpg();
compare("bmp1.bmp","bmp2.bmp");
return 0;
}

运行结果是:
the two file is same
调用库函数(非CxImage)怎么读取的?
lightning_wu 2010-12-10
  • 打赏
  • 举报
回复
bmp不为NULL,bmpsize也不是0。
CFile m_file;
m_file.open("c:\\1.bmp",CFile::modeCreate|CFile::modeWrite);
m_file.write(bmp,bmpsize);
m_file.close()
得到的图像和相机拍摄时一摸一样。但是调用库函数(非CxImage)读取时,就只能显示CxImage第一种文件保存的图形,而内存转换的显示就是黑的
wxf54318 2010-12-10
  • 打赏
  • 举报
回复
在多贴点代码啊,表面看你的bmp指针式NULL啊,bmpsize又是0,当然是全黑的了!

64,642

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧