首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

小弟我想实现灰度图的伪彩色处理,不过不知道小弟我写的代码哪里出现了有关问题,希望各位大神能帮小弟我看看

2013-06-25 
我想实现灰度图的伪彩色处理,不过不知道我写的代码哪里出现了问题,希望各位大神能帮我看看!//写入另一个文

我想实现灰度图的伪彩色处理,不过不知道我写的代码哪里出现了问题,希望各位大神能帮我看看!
//写入另一个文件   
fp=fopen(sfilename1,"wb");     
//以下定义中带“3”的都是新图像信息。 
BITMAPFILEHEADER bf3; 
BITMAPINFOHEADER bi3; 
int nBytesPerLine3 = (bi.biWidth*3+3)/4*4;//(bi.biWidth*3+3)/4*4是24位真彩图每一行占的实际字节数     
int nImageSize3 = nBytesPerLine3 * bi.biHeight; 
 memcpy( &bi3, &bi, sizeof(BITMAPINFOHEADER) );   
 bi3.biBitCount=24;//修改头文件以及数据结构信息
 bi3.biClrImportant=0;
 bi3.biClrUsed=0;
 bi3.biCompression=BI_RGB;
 bi3.biHeight=bi2.biHeight;
 bi3.biWidth=bi2.biWidth;
 bf3.bfSize = sizeof(BITMAPINFOHEADER);
 bi3.biXPelsPerMeter=0;
 bi3.biYPelsPerMeter=0;
 bi2.biSizeImage=nImageSize2; 
 
 fwrite(&bf3,sizeof(BITMAPFILEHEADER),1,fp);//写入位图头信息以及数据结构信息 
 fwrite(&bi3,sizeof(BITMAPINFOHEADER),1,fp); 
 


for(i=0;i<bi.biHeight;i++)//实现灰度到彩色变换
{
nLineStart2 = nBytesPerLine2 * i;//nBytesPerLine2是灰度图每一行的字节数
for(j=0;j<nBytesPerLine2;j++)
{
if(ImgData2[nLineStart2+j]<=64)//ImgData2[nLineStart2+j]是对应灰度图的灰度值
{
R=0;
G=(int)4*(ImgData2[nLineStart2+j]);
B=255;
}
if(ImgData2[nLineStart2+j]>64 
&& ImgData2[nLineStart2+j]<=128)
{
R=0;
G=255;
B=(int)4*(128-ImgData2[nLineStart2+j]);
}
if(ImgData2[nLineStart2+j]>128 
&& ImgData2[nLineStart2+j]<=192)
{
R=(int)4*(ImgData2[nLineStart2+j]-128);
G=255;
B=0;
}
if(ImgData2[nLineStart2+j]>192 
&& ImgData2[nLineStart2+j]<=255)
{
R=255;
G=(int)4*(255-ImgData2[nLineStart2+j]);
B=0;
}
Imgdata[i][3*j]=R;
Imgdata[i][3*j+1]=G;
Imgdata[i][3*j+2]=B;

}


CStringstr4;
str4.Format("%d",Imgdata[100][50]);
MessageBox(str4);


for(i=0;i<bi.biHeight;i++)
{
nLineStart2 = nBytesPerLine2 * i;
for(j=0;j<3*nBytesPerLine2;j++)
{
fwrite(&Imgdata[i][j],1,1,fp);  //写入位图信息
}
}



 free(Imgdata);     
 fclose(fp); 
这是我写的部分代码,前面有将图片转换为灰度图的代码,后面则是显示处理后的图片,不知道哪里出现问题,这个图片一直都显示的是没有,希望各位大神帮我看看 图片 伪彩色处理 MFC C++
[解决办法]
先不管灰度转换,直接写一个RGB的BMP文件看看正常不?

热点排行