|
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,
请问高人们这种情况要怎么解决 |
|