void CGrayDlg::OnToEignt()
{
if(date==NULL)
{
MessageBox("图像内容为空");
return;
}
memcpy(&eightfile,&fileheader,sizeof(fileheader));
eightinfo=(BITMAPINFO *)newBYTE[sizeof(BITMAPINFOHEADER)+256*sizeof(RGBQUAD)];//特别注意,重新分配调色板的BITMAPINF需要动态开辟内存空间,这样调色板才可以被赋值进去
memcpy(eightinfo,&bitinfo,sizeof(bitinfo));//先初始化信息头文件
intl=bitinfo.bmiHeader.biWidth*bitinfo.bmiHeader.biHeight;//计算新的文件大小
if(eight!=NULL)
{
delete []eight;
eight=NULL;
}
//开辟内存并且初始化
eight=new BYTE[l];
memset(eight,255,l);
BYTE temp,r,g,b;
temp=r=g=b=0;
int line=bitinfo.bmiHeader.biWidth*3;
//一下进行赋值操作
for(inti=0;i<bitinfo.bmiHeader.biHeight;i++)
for(intj=0;j<bitinfo.bmiHeader.biWidth;j++)
{
r=date[i*line+3*j];g=date[i*line+3*j+1];b=date[i*line+3*j+2];//获得rgb的值
temp=(BYTE)((77*r+151*g+28*b)>>8);
eight[i*line/3+j]=temp;
}
//以下对调色板进行处理
CGrayDlg::SetRGBQUAD(rgbquad);
memcpy((BYTE*)eightinfo+sizeof(BITMAPINFOHEADER),rgbquad,256*sizeof(RGBQUAD));//对调色板进行赋值,注意eightinfo的指针应该向后移动到指定位置
eightinfo->bmiHeader.biClrUsed=256;
eightinfo->bmiHeader.biSizeImage=l;
eightinfo->bmiHeader.biBitCount=8;
eightfile.bfSize=sizeof(eightfile)+sizeof(BITMAPINFOHEADER)+256*sizeof(RGBQUAD)+l;
eightfile.bfOffBits=eightfile.bfSize-l;
int w=eightinfo->bmiHeader.biWidth;
int y=eightinfo->bmiHeader.biHeight;
StretchDIBits(GetDC()->GetSafeHdc(),200,100,w,y,0,0,w,y,eight,eightinfo,DIB_RGB_COLORS,SRCCOPY);
}
void CGrayDlg::SetRGBQUAD(RGBQUAD *rgbquad)
{
inti=0;
for(i=0;i<=255;i++)
{
rgbquad[i].rgbBlue=i;
rgbquad[i].rgbGreen=i;
rgbquad[i].rgbRed=i;
rgbquad[i].rgbReserved=0;
}
}
分享到:
相关推荐
VC实现真彩色图像转换为8位图像,RGB三个波段的灰度通过一个线性变换式计算为单波段灰度。 关于代码: DWORD _width1 = WIDTHBYTES(width*8);//保存的8bits位图保存宽度 DWORD bytesCount1 = _width0*...
将24位真彩色位图转换为灰度图的C++程序,图片尺寸640*480。
(2) 定义灰色为图文件变量,套用灰度化公式,改变RGB值,将真彩色图像转换为灰色图像;(3) 将转换成的灰色图像存储到文件夹,然后关闭文件夹,释放内存空间。(4)由于从真菜色图到灰度图的转变之后,会产生新的...
从文件中读取象素数据,用打点的方法在屏幕上显示出来,用到了搜索文件的代码。BMP位图包括24位真彩色,灰度图象,以及实现从24位真彩色图象到灰度图象的转换。
从文件中读取象素数据,用打点的方法在屏幕上显示出来,用到了搜索文件的代码。BMP位图包括24位真彩色,灰度图象,以及实现从24位真彩色图象到灰度图象的转换。
VB图片框显示32位真彩色动态的ANI图像的代码,原来32位真彩是用4个字节来表示一个像素的,而24位真彩用3个字节表示一个像素,但这两种真彩显示的颜色数都是2的24次方,所不同的是,32位真彩用第4个字节来描述256级...
如果你想把彩色图片或者灰度图片二值化后在进行形态学处理,可以勾选对话框中的“二值化”选项。 值得一提的是,这个二值化是对每一层的颜色单独二值化,如果想要实现阈值效果,可以直接使用阈值功能或者转化为灰度...
从文件中读取象素数据,用打点的方法在屏幕上显示出来,用到了搜索文件的代码。BMP位图包括24位真彩色,灰度图象,以及实现从24位真彩色图象到灰度图象的转换。
5.2 彩色图转灰度图 85 5.3 真彩图转256色图 91 5.4 对比度扩展 100 5.5 削波 106 5.6 阈值化 107 5.7 灰度窗口变换 108 5.8 灰度直方图统计 110 5.9 灰度直方图均衡化 115 第6章 腐蚀,膨胀,细化算法 123 6.1 腐蚀...
//格式转换,置颜色深度为24位真彩色 void SetTo256Color(); //格式转换, 置颜色深度为256色(8位) ////////////////////////////////////////////////////////////////////////////////// #ifdef _DEBUG ...
矢量图适于描述由多种比较规则的图形元素构成的图形,但输出图像画面时将转换成位图形式。 图形图像的主要指标有分辨率、色彩数、图形灰度。分辨率有屏幕分辨率和输出分辨率。前者用每英寸行数和列数表示,后者是以...
这次我们将扩展上一章的教程,并且将三角形转换成一个彩色的棱锥,把正方形变为一个实心正方体。棱锥使用混合色,正方体每个面使用一种颜色。在3D空间创建物体可能很费时间,但是所获得的结果(收获)值得这样做。...
这次我们将扩展上一章的教程,并且将三角形转换成一个彩色的棱锥,把正方形变为一个实心正方体。棱锥使用混合色,正方体每个面使用一种颜色。在3D空间创建物体可能很费时间,但是所获得的结果(收获)值得这样做。...