我建了一个当文档应用程序,在View类中定义了几个变量
BITMAP bmp;
int m_nWidth; //存储位图的宽的数据成员
int m_nHeight; //存储位图高的数据成员
double m_dHrate;//位图高的比例因子
double m_dWrate;位图宽的比例因子
CBitmap m_Bitmap; //位图对象
写了如下一个函数想对256×××像进行灰度处理,打开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);
{
// 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和调色板进行处理呢?
转载于:https://blog.51cto.com/ccf19881030/312932