- 初始化值:
View中指针赋
yBmp.GetBmp()=NULL;
gray = NULL;
2.需要修改MyBitmap类中的成员函数的返回形式:nsigned char *&GetBmp();
3.修改了图片的显示方式:以对话框形式出现,因此增加一个图片显示对话框类
4.增加创建窗口函数:
voidCMyTestView::CreateDlg(CString name,BYTE *bmp,int type)
{
MyProcess myProcess;
BmpDlg*bmpdlg =newBmpDlg();
bmpdlg->Init(NULL,myBmp.GetBmpWidth(),myBmp.GetHeight());
bmpdlg->Create(IDD_HISTOGRAM,this);
name+=myBmp.GetBmpName();
bmpdlg->SetWindowText(name);
if(type==0) myProcess.ShowArrayToDevice(&bmpdlg->dcMemory,0,0,bmp,myBmp.GetWidth(),myBmp.GetHeight(),0);
elseif(type==1) myProcess.ShowArrayToDevice(&bmpdlg->dcMemory,0,0,bmp,myBmp.GetBmpWidth(),myBmp.GetHeight());
bmpdlg->ShowWindow(SW_SHOW);
}
5.增加变量控制BmpORGray是对彩色图像处理还是对灰度图像处理:
例:
if(BmpORGray==1)
{
BYTE *temp_gray =new BYTE [myBmp.GetBmpWidth()*myBmp.GetHeight()];
memcpy(temp_gray,gray,myBmp.GetBmpWidth()*myBmp.GetHeight()*sizeof(BYTE));
myProcess.PointEqua(temp_gray,myBmp.GetBmpWidth(),myBmp.GetHeight(),1);
reateDlg("灰度图 动态压缩",temp_gray,1);
}
if(BmpORGray==0)
{
BYTE *temp_bmp =new BYTE [myBmp.GetWidth()*myBmp.GetHeight()];
memcpy(temp_bmp,myBmp.GetBmp(),myBmp.GetWidth()*myBmp.GetHeight()*sizeof(BYTE));
myProcess.PointEqua(myBmp.GetBmp(),myBmp.GetWidth(),myBmp.GetHeight());
reateDlg("彩色图 动态压缩",temp_bmp);
}
6.修改MyProcess的显示图像函数,增加重载函数,用于显示处理后的彩色图像:
void MyProcess::ShowArrayToDevice(CDC *dc,int x,int y,unsignedchar*array,LONG width,LONG height,int type)
{
for(int j =0; j < height; j++)
for(int i =0; i < width; i++)
{
if(type==1)dc->SetPixel(x + i, y + height - j, RGB(array[j*width+i],array[j*width+i],array[j*width+i]));
elseif(type==0)
{
// b = array[j*width + i];
// g = array[j*width + i + 1];
// r = array[j*width + i + 2];
dc->SetPixel(x+i/3,y+height-j,RGB(array[j*width+i+2],array[j*width+i+1],array[j*width+i]));
i+=2;
}
}
}
7.增加判断彩色图像和灰度图像是否为空:
if(gray==NULL){MessageBox("请先转换成灰度图像!!!");return;}
if(myBmp.GetBmp()==NULL)
{
MessageBox("请先打开一张BMP格式位图!!!");
return;
}
8.修改直方图类,增加彩色图像直方图画法