24bits BMP文件前54个字节是头,然后是图像数据:
RGBRGB........ //图像最下面一行的数据,每三个字节一像素,并且每行的长度是4bytes整数倍,就是DIB结构数据区的开始,用读memory或file的方式依次拿到R、G、B数据
RGBRGB........ //图像倒数二行数据.....
....... //一直到第一行数据结束gray=0.3*r+0.59*G+0.11*b是根据人眼对RGB不同的敏感度转为Gray的,公式不固定。
RGBRGB........ //图像最下面一行的数据,每三个字节一像素,并且每行的长度是4bytes整数倍,就是DIB结构数据区的开始,用读memory或file的方式依次拿到R、G、B数据
RGBRGB........ //图像倒数二行数据.....
....... //一直到第一行数据结束gray=0.3*r+0.59*G+0.11*b是根据人眼对RGB不同的敏感度转为Gray的,公式不固定。
解决方案 »
- 有懂四叉树和八叉树算法的朋友吗?
- 文件的读写问题!
- 请教高手:关于文件的读写!
- 关于流istream的问题
- 高分求解 evc显示jpg问题
- 关于CDialog的问题(如何隐藏从CDialog派生的对话框,但还能处理发给该窗口的自定义消息)100分相送
- 高手请进!VC++中ADO的Connection对象的事物处理问题!(可惜无分可赠!)
- 高分求救:数组维数最高可以是多少?
- 在程序中如何向WEB发送一个URL请求?
- 一个极有挑战的问题,如何让在本身软件环境下生成的运行程序,能生成独立的EXE执行文件?就想FALSH的动画一样。
- 怎么在VC中用瑞软表格??
- 高分征解:保证你们…………………………………………
for(int x=0;x<width;x++)
for(int y=0;y<Heigh;y++){
R=.....?
G=...?
b=....?
gray[x][y]=0.3*r+0.59*G+0.11*b;怎样将之定义为数组?
}
十分感谢!
for(int y=0;y<Heigh;y++)
{
R = *(lpRGBData + iRawCount * Height + x * 3);
G = *(lpRGBData + iRawCount * Height + x * 3 + 1);
B = *(lpRGBData + iRawCount * Height + x * 3 + 2);Gray = 0.3 * R + 0.59 * G + 0.11 * B;*(lpGrayData + iRawCount * Height + x * 3) =
*(lpGrayData + iRawCount * Height + x * 3 + 1) =
*(lpGrayData + iRawCount * Height + x * 3 + 2) = Gray;//gray[x][y]=0.3*r+0.59*G+0.11*b;怎样将之定义为数组?
}
[email protected]
thank you very much.
--------
typedef struct
{
BYTE R;
BYTE G;
BYTE B;
}BITS;
BITS bits
int al = width*3/4;
for(int x=0;x<=width;x++)
for(int y=0;y<Heigh;y++)
{
if(x==width)
{
if(al)
//文件Seek al个字节
}
else
{
//文件读bits
//因为位图是从最后一行开始存的,所以:你要
gray[x][Heigh-y-1] = 0.3*r+0.59*G+0.11*b;
}
}
to adrianx:4bytes boundary我已经注意了,int iRawCount = (width * 3 + 3) / 4 * 4; 就是因为这个,例如,width = 1,数据3个bytes,应该占用4bytes,你算一下就知道了,另外,你拿到的数据还是要用来显示,不必把它颠倒过来。
{
CDC *pDC=GetDC();
CDibDoc* pDoc = GetDocument();
CString str;
int cxDIB,cyDIB;
int R,G,B;
cxDIB=(int)pDoc->Width();
cyDIB=(int)pDoc->Height();
int iRawCount = (cxDIB * 3 + 3) / 4 * 4;
for(int x=0;x<cxDIB;x++)
for(int y=0;y<cyDIB;y++){
R = *(bitmap.m_pBits + iRawCount * cyDIB + x * 3);//I define the (CDib bitmap) in CDibView.h
G = *( bitmap.m_pBits+ iRawCount * cyDIB+ x * 3 + 1);
B = *(bitmap.m_pBits + iRawCount * cyDIB + x * 3 + 2);
I[x][y] = 0.3 * R + 0.59 * G + 0.11 * B;
}
}
but it can't get the R,G,B?
24位DIB在内存中是按BGR顺序存储的。
所以上面的程序的顺序要颠倒一下
How do I give you the score.It seems no place do I knock or enter.