图像处理案例newWord文档下载推荐.docx
《图像处理案例newWord文档下载推荐.docx》由会员分享,可在线阅读,更多相关《图像处理案例newWord文档下载推荐.docx(71页珍藏版)》请在冰豆网上搜索。
模糊
边缘
GrayScale
图像编辑
图像编辑可以在图像上进行自由画线、画矩形/椭圆等操作。
在Imager界面左边的ToolBox面板中选择“图像编辑”页,可以看到相应按钮。
自由手绘
画椭圆
二、Imager的开发
2.1开发工具与设置
2.1.1BCGPRO
BCGPRO(BCGControlBarProfessional)是一个用于应用程序界面开发的界面库,其前身为一个名为CJLIBRARY的共享界面库,后经过改进商业化。
BCGPRO提供了多种风格的界面效果和格式控件,这包括Office2000/OfficeXP/WindowXP界面风格以及各种按钮、列表框、工具条等。
BCGPRO的安装
找到BCGPRO安装程序BCGControlBarPro.exe,双击开始安装。
2>
按照提示,单击”Next”或“Yes”按钮,直到出现如下提示。
单击“Finish”按钮,完成安装。
完成安装后,BCGPRO安装程序会自动查找计算机上的VC,并试图将BCGPRO的工程向导以及帮助文件集成到VC中。
单击“OK”按钮,让其完成该项工作。
3>
如果集成顺利的话,会出现如下窗口,单击“Close”按钮,BCGPRO安装程序会试图调用VC编译BCGPRO的动态和静态链接库。
4>
在随后启动的BCGPROBuildWizard中单击下一步。
5>
在如下窗口中选择需要编译的工程类型。
一般多选择VC++6Release和VC++6Debug两个动态链接库。
如果需要使用到静态链接库或者其它Unicode类型的动态库,可以选择相应的选项。
单击“下一步”。
6>
BCGPROBuildWizard开始编译所需的库文件。
编译进度会在进度条上显示。
编译完成后单击“下一步”。
7>
BCGPROBuildWizard提供了编译过程中产生的信息,如果有编译错误,能在其中看到。
单击“完成”完成BCGPRO的编译工作。
安装正式完工。
创建BCGPRO工程
启动VC6,在File菜单中选择New菜单项创建一个工程。
在工程向导列表中可以单刀BCGPRO安装程序在其中添加了两个工程向导,分别为BCGPROAppWizard和BCGSkinApplicationWizard,构建程序界面使用前者,后者用来创建程序Skin的。
选择BCGPROAppWizard,输入工程名和工程路径,并单击OK进入到BCGPRO工程向导。
前面的步骤跟MFCAppWizard相同,设置也类似,只是BCGPRO中的资源文件只有English(US)一种,要换成中文的资源,还需要费一些功夫。
按照提示设置工程并单击下一步,直到出现如下窗口,开始BCGPRO的设置。
你可以选择应用程序界面的风格是类似VC6还是Office2000或者OfficeXP,以及是否支持浮动菜单条以及256色的工具条图像(VC默认支持的是16色)等。
设置后单击“Next”。
在下面的窗口中选择应用程序界面中需要用到的特殊元素。
例如VC6中典型的Workspacebar以及OutLook中的shortcutsbar等。
也可以现在不选择,等以后在工程中添加相应代码来添加界面元素。
单击“Next”按钮。
在本窗口中设置了是否支持用户自定义菜单和工具条,以及可以自定义的内容。
单击“Next”继续。
在最后一个窗口里,可以选择是否应用Skin,一般的程序都可以不选择该项。
单击“Finish”完成工程向导,BCGPRO工程向导会自动为你创建工程和代码。
BCGPRO自动在工程的StdAfx.h头文件中包含了BCGCBProInc.h,该头文件中声明了BCGPRO中所提供的类。
BCGPRO安装程序还将BCGPRO的头文件文件夹和库文件文件夹添加到VC6的头文件路径和库文件路径中。
这样编译工程的时候可以找到所需的BCGPRO文件。
要运行BCGPRO界面的程序,需要将相应的动态链接库(如果使用动态链接库)从BCGPRO安装目录下的bin子文件夹中拷贝到用户程序所在的文件夹中。
最后用户程序发布时,该动态链接库也要随之一起发布。
下面是BCGPRO附带的例子程序的界面效果。
.NET风格
OutLook风格
各种控件
2.1.2ImageX
ImageX是FathSoft推出的一个用于图像显示和处理的ActiveX控件,未注册的有使用时间限制。
双击ImageX的安装程序imgsetup.exe,启动Imager的安装向导。
按照提示进行安装设置,并单击“Next”按钮,直至安装完成。
Imager安装程序会向操作系统注册一个名称为Imager的控件,其对应的文件为Imager安装目录下的Imagex.ocx。
2.2搭建应用程序框架
2.2.1目标
这一部分工作的目的是使用BCGPRO创建一个OfficeXP风格的应用程序界面,创建所需的工具条、TOOLBOX以及建立命令消息映射(即用户操作命令与相应处理函数之间的映射)。
2.2.2搭建工程
打开VC6,使用BCGPRO工程向导创建工程,名为Imager。
单击OK开始工程向导。
在下面所示的窗口中选择MultipileDocument
在下面所示的窗口中确保选中了支持ActiveXControls项。
在下面所示的窗口中选择CimagerView的父类为CFormView,因为我们需要在视图中添加ActiveX控件,使用CFormView会比较方便。
在下面所示的窗口中进行如图所示的设置。
选择OfficeXP的界面风格使用浮动菜单条(Dockingmenubar)和切换式MDI。
选择BCGPRO支持Outlook风格的标签、ImmediateDockingStyle和Autohidebars。
单击“Finish”按钮,接受后面的默认设置。
下图为初始的应用程序界面。
2.2.3创建工具条
一般的工具条
我们需要一个普通的工具条,用以执行图像缩放、切换等功能。
如下图所示。
工具条的按钮依次为“前一张图片”,“后一张图片”,“放大”,“缩小”。
创建工具条资源。
工具条ID为IDR_TOOLBAR1,其上面按钮的ID分别为ID_PREV_PIC,ID_NEXT_PIC,ID_ZOOM_IN,ID_ZOOM_OUT。
在头文件MainFrm.h中为主框架类CMainFrame添加一个CBCGPToolBar类的对象。
classCMainFrame:
publicCMDIFrameWnd
{
...
protected:
//controlbarembeddedmembers
CBCGPToolBarm_wndToolBar1;
};
在CMainFrame的OnCreate函数中创建工具条。
intCMainFrame:
:
OnCreate(LPCREATESTRUCTlpCreateStruct)
if(!
m_wndToolBar1.Create(this,//创建工具条
WS_CHILD|WS_VISIBLE|CBRS_LEFT|CBRS_TOOLTIPS|CBRS_FLYBY|CBRS_HIDE_INPLACE|CBRS_SIZE_DYNAMIC|
CBRS_GRIPPER|CBRS_BORDER_3D,
ID_VIEW_TOOLBAR1)||//当工具条有变化时将向通过该ID发送WM_COMMAND消息
!
m_wndToolBar1.LoadToolBar(IDR_TOOLBAR1,0,0,TRUE))//加载工具条资源
{
TRACE0("
Failedtocreatebuildtoolbar\n"
);
returnFALSE;
//failtocreate
}
m_wndToolBar1.SetWindowText("
ViewerBar"
//设置工具条标题
m_wndToolBar1.EnableDocking(CBRS_ALIGN_ANY);
//工具条支持任意位置停靠
EnableDocking(CBRS_ALIGN_ANY);
//CMainFrame支持工具条任意位置停靠
DockControlBar(&
m_wndToolBar1);
//停靠工具条
...
return0;
}
在IDR_POPUP_TOOLBAR菜单资源中添加ID_VIEW_TOOLBAR1菜单项,用于显示和隐藏该工具条。
在ClassWizard中添加ID_VIEW_TOOLBAR1的COMMAND消息和
UPDATE_COMMAND_UI消息的响应函数。
在CMainFrame的上述响应函数中添加如下代码用于显示和隐藏该工具条。
voidCMainFrame:
OnViewToolbar1()
ShowControlBar(&
m_wndToolBar1,
(m_wndToolBar1.GetStyle()&
WS_VISIBLE),
FALSE,TRUE);
//如果Toolbar1可见则隐藏,反之则显示。
OnUpdateViewToolbar1(CCmdUI*pCmdUI)
pCmdUI->
SetCheck(m_wndToolBar1.GetStyle()&
WS_VISIBLE);
//如果Toolbar1可见,则在该菜单项上加上选中标记。
该工具条最后的效果如下图所示。
选中标记
工具条
具有特殊按钮的工具条
我们还需要一个叫做FormatBar的工具条,上面需要有下拉列表和颜色选取器。
工具条ID为IDR_FORMAT_BAR,上面按钮的ID分别为
IDC_LINE_TYPE、IDC_LINE_WEIGHT、IDC_FORE_COLOR、IDC_BACK_COLOR、IDC_FONT_NAME、IDC_FONT_WEIGHT、ID_BOLD、ID_ITALIC、ID_UNDERLINE,用于选择线形,线宽,前景色,背景色,字体、字号,粗体,斜体,下划线。
这些工具条上的按钮将被用户自定义的按钮替换掉。
其中线形,线宽,字体,字号将替换成非按钮对象,因此不需要设置它们的图像,它们仅仅起到占位的作用。
创建一个CBCGPToolBar的派生类CFormatBar。
其中头文件中代码如下:
classCFormatBar:
publicCBCGPToolBar
DECLARE_SERIAL(CFormatBar)
//Construction
public:
CFormatBar();
//Operations
virtualvoidCFormatBar:
OnUpdateCmdUI(CFrameWnd*pTarget,BOOLbDisableIfNoHndler);
CBCGPColorMenuButton*CreateColorButton(UINTid);
//Attributes
voidReset();
CBCGPColorMenuButton*pColorButton;
CBCGPColorMenuButton*pBackColorButton;
CSizem_szBaseUnits;
CPalettem_palColorPicker;
//Paletteforcolorpicker
intm_nNumColours;
//Implementation
virtualvoidOnReset();
//Generatedmessagemapfunctions
//{{AFX_MSG(CFormatBar)
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
向cpp文件中加入颜色定义
staticColourTableEntrycrColours[]=
{RGB(0x00,0x00,0x00),_T("
Black"
)},
{RGB(0xA5,0x2A,0x00),_T("
Brown"
{RGB(0x00,0x40,0x40),_T("
DarkOliveGreen"
{RGB(0x00,0x55,0x00),_T("
DarkGreen"
{RGB(0x00,0x00,0x5E),_T("
DarkTeal"
{RGB(0x00,0x00,0x8B),_T("
DarkBlue"
{RGB(0x4B,0x00,0x82),_T("
Indigo"
{RGB(0x28,0x28,0x28),_T("
Gray-80%"
{RGB(0x8B,0x00,0x00),_T("
DarkRed"
{RGB(0xFF,0x68,0x20),_T("
Orange"
{RGB(0x8B,0x8B,0x00),_T("
DarkYellow"
{RGB(0x00,0x93,0x00),_T("
Green"
{RGB(0x38,0x8E,0x8E),_T("
Teal"
{RGB(0x00,0x00,0xFF),_T("
Blue"
{RGB(0x7B,0x7B,0xC0),_T("
Blue-Gray"
{RGB(0x66,0x66,0x66),_T("
Gray-50%"
{RGB(0xFF,0x00,0x00),_T("
Red"
{RGB(0xFF,0xAD,0x5B),_T("
LightOrange"
{RGB(0x32,0xCD,0x32),_T("
Lime"
)},
{RGB(0x3C,0xB3,0x71),_T("
SeaGreen"
{RGB(51,204,204),_T("
Aqua"
{RGB(0x7D,0x9E,0xC0),_T("
LightBlue"
{RGB(0x80,0x00,0x80),_T("
Violet"
{RGB(0x7F,0x7F,0x7F),_T("
Gray-40%"
{RGB(0xFF,0xC0,0xCB),_T("
Pink"
{RGB(0xFF,0xD7,0x00),_T("
Gold"
{RGB(0xFF,0xFF,0x00),_T("
Yellow"
{RGB(0x00,0xFF,0x00),_T("
BrightGreen"
{RGB(0x00,0xFF,0xFF),_T("
Turquoise"
{RGB(0,204,255),_T("
SkyBlue"
{RGB(234,128,102),_T("
Plum"
{RGB(0xC0,0xC0,0xC0),_T("
Gray-25%"
{RGB(0xFF,0xE4,0xE1),_T("
Rose"
{RGB(255,254,153),_T("
Tan"
{RGB(0xFF,0xFF,0xE0),_T("
LightYellow"
{RGB(204,255,204),_T("
LightGreen"
{RGB(204,255,255),_T("
LightTurquoise"
{RGB(153,204,255),_T("
PaleBlue"
{RGB(204,153,255),_T("
Lavender"
{RGB(0xFF,0xFF,0xFF),_T("
White"
)}
在该类中添加一个函数
CreateColorButton,用于创建一个指定ID的颜色选取按钮。
if(m_palColorPicker.GetSafeHandle()==NULL)
m_nNumColours=sizeof(crColours)/sizeof(ColourTableEntry);
ASSERT(m_nNumColours<
=MAX_COLOURS);
if(m_nNumColours>
MAX_COLOURS)
m_nNumColours=MAX_COLOURS;
//Createthepalette
struct
LOGPALETTELogPalette;
PALETTEENTRYPalEntry[MAX_COLOURS];
}pal;
LOGPALETTE*pLogPalette=(LOGPALETTE*)&
pal;
pLogPalette->
palVersion=0x300;
palNumEntries=(WORD)m_nNumColours;
for(inti=0;
i<
m_nNumColours;
i++)
palPalEntry[i].peRed=GetRValue(crColours[i].crColour);
palPalEntry[i].peGreen=GetGValue(crColours[i].crColour);
palPalEntry[i].peBlue=GetBValue(crColours[i].crColour);
palPalEntry[i].peFlags=0;
m_palColorPicker.CreatePalette(pLogPalette);
CBCGPColorMenuButton*pColorButton=new
CBCGPColorMenuButton(id,_T("
TextColor..."
),&
m_palColorPicker);
pColorButton->
EnableAutomaticButton(_T("
Automatic"
),RGB(0,0,0));
EnableOtherButton(_T("
MoreColors..."
));
SetColumnsNumber(8);
//Initializecolornames:
CBCGPColorMenuButton:
SetColorName(crColours[i].crColour,crColours[i].szName);
returnpColorButton;
重载CBCGPToolBar类的OnReset函数。
在该函数内将特殊的按钮去替换工具条上普通的按钮。
每次BCGPRO创建工具条前都会调用该函数。
voidCFormatBar:
Reset()
CBCGPToolbarComboBoxButtoncomboLineStyle(IDC_LINE_TYPE,CImageHash:
GetImageOfCommand(IDC_LINE_TYPE,FALSE),CBS_DROPDOWNLIST);
comboLineStyle.AddItem("
SOLID"
Dash"
DashDot"
Dot"
DashDotDot"
comboLineStyle.SelectItem(NULL);
ReplaceButton(IDC_LINE_TYPE,comboLineStyle);
//LineWeight
CBCGPToolbarComboBoxButtoncomboLineWeight(IDC_LINE_WEIGHT,CImageHash:
GetImageOfCommand(IDC_LINE_WEIGHT,FALSE),CBS_DROPDOWNLIST);
comboLineWeight.AddItem("
0"
1"
2"
5"
8"
10"
comboLineWei