如何用DIB绘制8位的灰度图像?绘出的灰度图像为什么出现蓝色和红色?程序片段:m_bmpInfoHeader1.biSize = sizeof(BITMAPINFOHEADER);m_bmpInfoHeader1.biPlanes = 1;m_bmpInfoHeader1.biBitCount = 8;m_bmpInfoHeader1.biHeight = 720;

来源:学生作业帮助网 编辑:六六作业网 时间:2024/12/18 21:45:30
如何用DIB绘制8位的灰度图像?绘出的灰度图像为什么出现蓝色和红色?程序片段:m_bmpInfoHeader1.biSize=sizeof(BITMAPINFOHEADER);m_bmpInfoHea

如何用DIB绘制8位的灰度图像?绘出的灰度图像为什么出现蓝色和红色?程序片段:m_bmpInfoHeader1.biSize = sizeof(BITMAPINFOHEADER);m_bmpInfoHeader1.biPlanes = 1;m_bmpInfoHeader1.biBitCount = 8;m_bmpInfoHeader1.biHeight = 720;
如何用DIB绘制8位的灰度图像?绘出的灰度图像为什么出现蓝色和红色?
程序片段:
m_bmpInfoHeader1.biSize = sizeof(BITMAPINFOHEADER);
m_bmpInfoHeader1.biPlanes = 1;
m_bmpInfoHeader1.biBitCount = 8;
m_bmpInfoHeader1.biHeight = 720;
m_bmpInfoHeader1.biWidth = 1280;
m_bmpInfoHeader1.biClrImportant = 0;
m_bmpInfoHeader1.biClrUsed = 256;
m_bmpInfoHeader1.biCompression = BI_RGB;
m_bmpInfoHeader1.biSizeImage = 0;
m_bmpInfoHeader1.biXPelsPerMeter = 0;
m_bmpInfoHeader1.biYPelsPerMeter = 0;
使用一下语句绘图:
DrawDibDraw=(ghdd,hDC,0,0,1280,720,&m_bmpInfoHeader1,pPtrPicData1,0,0,1280,720,0);
这样绘出的图像会出现蓝色和红色,用DrawDibDraw绘8位灰度图像是不是需要建立颜色表和调色板?另外,使用24位绘图正常.

如何用DIB绘制8位的灰度图像?绘出的灰度图像为什么出现蓝色和红色?程序片段:m_bmpInfoHeader1.biSize = sizeof(BITMAPINFOHEADER);m_bmpInfoHeader1.biPlanes = 1;m_bmpInfoHeader1.biBitCount = 8;m_bmpInfoHeader1.biHeight = 720;
biBitCount为8时要建立调色板和颜色表,真彩色(如:24位位图)则不需要调色板和颜色表.
(我猜想之所以这样处理,是出于节省内存的考虑.因为对于24位位图,它能表示的颜色数很多,如果要建一个颜色表,这个颜色表本身的开销就不小,还不如不要颜色表,颜色数据区的数值就表示BGR值,但对于诸如1、4、8位的位图,它们所能展现的颜色数是非常有限的,如果还用24位位图的处理方法:每个像素点的颜色值占3个字节表示BGR值,那么当图像尺寸很大时,还不如建一个颜色表,把这张位图用到的各种颜色事先定义,而在颜色数据区分别用1bit、4bit、1byte来存储该像素点的颜色在颜色表中的索引值.)
所以你的程序对于24位位图测试成功,对8位位图等则不会成功.
颜色表中RGBQUAD描述每一种颜色项.对于1、4、8、24位位图,需要的RGBQUAD结构体的数量分别为:2、16、256、0.
typedef struct tagRGBQUAD {
BYTE rgbBlue;
BYTE rgbGreen;
BYTE rgbRed;
BYTE rgbReserved;
} RGBQUAD; // 占用四个字节
其实,从位图文件头BITMAPFILEHEADER的成员bfOffBits可以计算出来所需RGBQUAD的个数.对于8位位图,这个成员的值为1078.则RGBQUAD的个数是:(1078 - 54) / 4 = 256.

如何用DIB绘制8位的灰度图像?绘出的灰度图像为什么出现蓝色和红色?程序片段:m_bmpInfoHeader1.biSize = sizeof(BITMAPINFOHEADER);m_bmpInfoHeader1.biPlanes = 1;m_bmpInfoHeader1.biBitCount = 8;m_bmpInfoHeader1.biHeight = 720; C# 绘制图像的灰度直方图该如何绘制?和直方图绘制有区别么? 一个图像的最大、最小灰度阈值如何用MATLAB程序实现(最好能举例说明) 如何用Matlab提取灰度图像最大灰度值 如何用matlab生成256 级的灰度图像把一付彩色图片转化成一副256级的灰度图像 红外探测器得到的图像是灰度图吧,那是8位还是24位呢? 我用SetPixel绘制24位灰度图像的时候为什么是红色的?比如我用SetPixel(i,j,(r,g,b))将lena的灰度信息读入,然后通过两个循环绘制.图像可以绘制出来,但是本来的灰色图像变成了红色,请问是为 请教一下如何用matlab把已经做好区域标记的图像中每个区域的灰度平均值计算出? 8位灰度图像,最多可以表示的颜色数为多少种?谢谢 如何用MATLAB实现灰度图像的均值和方差,公式如下图,其中I(i,j)是图像的灰度值,N是图像的长和宽 彩色图像转换成灰度图像用什么算法灰度分割得细转换后的灰度图像最好能达到16位 如何用matlab绘制方波的波形?例如我有一个01011100的序列 怎么绘出它的波形 如何用plot命令绘制函数x^2*sin(x^(-2))的图像 “dib”的中文意思 如何用matlab绘制matlab的标志 两幅大小相同的bmp图像,之前已经进行了灰度化处理化为了灰度图像,即各像素点灰度值均为一个0到255之间的数值(8位图像?),现在想对这两幅图像的每个对应像素点的灰度值进行相减,再以这 8位图像的灰度值是:255.从0开始,那么32位的卫星遥感图像呢?灰度值是从什么值开始?范围是从? 如何用MATLAB绘制函数图像绘制函数x=x0+Asin(kx0-wt+q)z=z0-Acos(kx0-wt+q)的图像