我建了一个当文档应用程序,在View类中定义了几个变量BITMAP bmp;
int m_nWidth; //存储位图的宽的数据成员
int m_nHeight; //存储位图高的数据成员
double m_dHrate;//位图高的比例因子
double m_dWrate;位图宽的比例因子
CBitmap m_Bitmap; //位图对象
写了如下一个函数想对256色图像进行灰度处理,打开bmp图像函数已经写好void CBTTMAPView::OnBmp256ToGray()
{
// TODO: Add your command handler code here
CDC *pDC=this->GetDC(); //获得设备上下文
//CRect m_rect;
//this->GetClientRect(&m_rect); //获得窗口客户区
COLORREF m_color;
BYTE r,g,b;
DWORD m_gray;
for(int i=0;i<(int)(m_nWidth*m_dWrate);i++)
for(int j=0;j<(int)(m_nHeight*m_dHrate);j++)
{
m_color=pDC->GetPixel(i,j); //获得颜色
r=GetRValue(m_color);
g=GetGValue(m_color);
b=GetBValue(m_color);
m_gray=(int)(0.38*r+0.49*g+0.1*b);//设置灰度颜色值
m_color=RGB(m_gray,m_gray,m_gray);
pDC->SetPixel(i,j,m_color); //用灰度颜色画点
}
InvalidateRect(NULL);
}
);发现循环利用GetPixel和SetPixel函数获取和设置像素点,得到的灰度处理结果非常慢,如何通过Dib和调色板进行处理呢,让灰度处理更快,希望高手指点指点。
int m_nWidth; //存储位图的宽的数据成员
int m_nHeight; //存储位图高的数据成员
double m_dHrate;//位图高的比例因子
double m_dWrate;位图宽的比例因子
CBitmap m_Bitmap; //位图对象
写了如下一个函数想对256色图像进行灰度处理,打开bmp图像函数已经写好void CBTTMAPView::OnBmp256ToGray()
{
// TODO: Add your command handler code here
CDC *pDC=this->GetDC(); //获得设备上下文
//CRect m_rect;
//this->GetClientRect(&m_rect); //获得窗口客户区
COLORREF m_color;
BYTE r,g,b;
DWORD m_gray;
for(int i=0;i<(int)(m_nWidth*m_dWrate);i++)
for(int j=0;j<(int)(m_nHeight*m_dHrate);j++)
{
m_color=pDC->GetPixel(i,j); //获得颜色
r=GetRValue(m_color);
g=GetGValue(m_color);
b=GetBValue(m_color);
m_gray=(int)(0.38*r+0.49*g+0.1*b);//设置灰度颜色值
m_color=RGB(m_gray,m_gray,m_gray);
pDC->SetPixel(i,j,m_color); //用灰度颜色画点
}
InvalidateRect(NULL);
}
);发现循环利用GetPixel和SetPixel函数获取和设置像素点,得到的灰度处理结果非常慢,如何通过Dib和调色板进行处理呢,让灰度处理更快,希望高手指点指点。
解决方案 »
- 中兴薪资咨询
- new 分配的内存,如果是数组的话,如何得到整个数组的字节数呢?sizeof 不行呀?
- mfc 双显 编程
- 有段代码需要高手帮我解释一下啊,谢谢~
- Hook的问题,如何对CListCtrl的InsertItem下钩子...为什么我的钩子不起作用
- 请问如何在VC中用ODBC API来创建SQL Server ODBC数据源?(100)
- 如何使用UDP协议来实现自发自收数据包?请大侠们指教啊!急!!!
- 右键弹出菜单问题
- 一个很是奇怪的问题关于多视的(急急!!!!)
- ie安全属性太高 控件的属性和方法用不了(大侠们帮帮忙啊)
- CSocket大问题 急急急!!!
- 多个客户端与一个服务端 文件传输
一个解决办法就是开辟一个缓冲区,不必用Dib设备无关位图了。
其实你这个问题很简单,你是不是连最基本的BMP文件格式都不懂啊?你完全可以不用什么GetPixel和SetPiexl函数啊,对于BMP格式的文件,现在处理的都是Dib格式的,也就是与设备无关,如果你选的是图片是真彩色那么一个像素占3个字节,RGB各占一个字节,这样的话,BMP文件格式是这样的,先是信息头,接着是每个像素的RGB值,然后你可以逐个读取各个像素的RGB值就可以了,如果不是真彩色,那么中间还多了一个颜色索引表。
不讲了,太多了,你可以到百度文库里去搜索 《VC数字图像处理编程讲座》这个Word文档看,看完你就什么都明白了,如果你找不到,就去我空间留个邮箱给我,我明天传你就是了。