查看: 1208|回复: 1

读写位图时蓝色会变成红色

[复制链接]

该用户从未签到

发表于 2010-12-4 16:46:31 | 显示全部楼层 |阅读模式
osg::Image * inImage =osgDB::readImageFile("f: \\xcy.bmp");//这是用osgDB::readImageFile的方法读取一张在F盘下名为xcy.bmp的4*4的位图
FILE *file;
  char *a=new char[4*4*3];
  memcpy(a,inImage->data(),4*4*3);
file=fopen("f: \\xcy.bmp","r+b");
char bmpFileHdr[14];
char bmpInfoHdr[40];

fseek(file, 0, SEEK_SET);
fread(&bmpFileHdr,14, 1, file);
fread(&bmpInfoHdr, 40, 1, file);
char *tmp_buf = new char[4*4* 3];
fread(tmp_buf, 1, 4* 4* 3, file);//上面这段代码是用file的fread方法读取一张在F盘下名为xcy.bmp的4*4的位图
FILE *file2;
char bmpFileHdr2[14];
char bmpInfoHdr2[40];
file2=fopen("f: \\czx.bmp","r+b");
fseek(file2, 0, SEEK_SET);
fwrite(&bmpFileHdr,1,14 , file2);
fwrite(&bmpInfoHdr, 1,40, file2);
fwrite(inImage->data(), 48, 1, file2);//上面这段代码是用用osgDB::readImageFile读到的图片数据写入在F盘下名为czx.bmp的4*4的位图
     // fwrite(tmp_buf, 48, 1, file2)//上面这段代码是用file方法将读到的图片数据写入在F盘下名为czx.bmp的4*4的位图
问题是当我的图片中的像素为黑色,或白色,或绿色等时,都将没有错误,但当我的xcy.bmp图片中有蓝色的像素时,蓝色的像素在新的图片中就会变成红色,经过测试,发现当读入蓝色像素时,inimage->data()的值和tmp_buf的值分别为0和-1,
请问高人们这种情况要怎么解决

该用户从未签到

发表于 2010-12-6 10:20:33 | 显示全部楼层
osgDB::readImageFile("f: [url=file://\\xcy.bmp]\\xcy.bmp");
您的代码真的是这样书写的?您是否检查过读取文件是否成功
您需要登录后才可以回帖 登录 | 注册

本版积分规则

OSG中国官方论坛-有您OSG在中国才更好

网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

联系我们

  • 工作时间:09:00--18:00
  • 反馈邮箱:1315785073@qq.com
快速回复 返回顶部 返回列表