图像处理案例new.docx

上传人:b****4 文档编号:3815133 上传时间:2022-11-25 格式:DOCX 页数:71 大小:1.81MB
下载 相关 举报
图像处理案例new.docx_第1页
第1页 / 共71页
图像处理案例new.docx_第2页
第2页 / 共71页
图像处理案例new.docx_第3页
第3页 / 共71页
图像处理案例new.docx_第4页
第4页 / 共71页
图像处理案例new.docx_第5页
第5页 / 共71页
点击查看更多>>
下载资源
资源描述

图像处理案例new.docx

《图像处理案例new.docx》由会员分享,可在线阅读,更多相关《图像处理案例new.docx(71页珍藏版)》请在冰豆网上搜索。

图像处理案例new.docx

图像处理案例new

Imager指南

注意:

本文档仅提供设计思路,步骤并非完整的制作步骤,代码不定能直接编译运行。

完整代码请参照源程序。

Imager的使用

简介

Imager是一个集成了屏幕抓取、图像处理和图像编辑等基本功能的软件。

Imager具有OfficeXP界面风格,采用FathSoft的ImageX控件进行图像处理,能够处理bmp、jpg、gif等多种图形文件,能够通过网络、屏幕抓取以及从扫描仪等设备中获取图像资源。

图6-1Imager主界面

获取图像资源

抓取屏幕

单击File菜单,选中Capture菜单项,在Capture子菜单中选择Screen,抓取屏幕

图6-2抓取屏幕

图6-3抓取屏幕结果

打开图像

单击File菜单,选中Open菜单项。

打开图像文件。

打开图像文件

来自扫描仪

单击File菜单,选中Aquire菜单项,打开扫描仪面板。

打开Aquire面板

来自网络的图像资源

单击File菜单,选中Import选项,开网络图像资源对话框。

图像处理

基本处理

基本的图像处理包括图像的翻转、镜像、缩放和旋转等。

在Imager界面左边的ToolBox面板中选择“图像处理”页,可以看到相应按钮。

原图

翻转

镜像

旋转45度

缩放

滤镜操作

滤镜处理可以对图像进行模糊、反色、锐化、羽化等滤镜操作。

在Imager界面左边的ToolBox面板中选择“滤镜操作”页,可以看到相应按钮。

反色

模糊

边缘

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可见则隐藏,反之则显示。

}

voidCMainFrame:

:

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

public:

virtualvoidCFormatBar:

:

OnUpdateCmdUI(CFrameWnd*pTarget,BOOLbDisableIfNoHndler);

CBCGPColorMenuButton*CreateColorButton(UINTid);

//Attributes

public:

voidReset();

CBCGPColorMenuButton*pColorButton;

CBCGPColorMenuButton*pBackColorButton;

CSizem_szBaseUnits;

protected:

CPalettem_palColorPicker;//Paletteforcolorpicker

intm_nNumColours;

//Implementation

protected:

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;

pLogPalette->palNumEntries=(WORD)m_nNumColours;

for(inti=0;i

{

pLogPalette->palPalEntry[i].peRed=GetRValue(crColours[i].crColour);

pLogPalette->palPalEntry[i].peGreen=GetGValue(crColours[i].crColour);

pLogPalette->palPalEntry[i].peBlue=GetBValue(crColours[i].crColour);

pLogPalette->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));

pColorButton->EnableOtherButton(_T("MoreColors..."));

pColorButton->SetColumnsNumber(8);

//Initializecolornames:

for(inti=0;i

{

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");

comboLineStyle.AddItem("Dash");

comboLineStyle.AddItem("DashDot");

comboLineStyle.AddItem("Dot");

comboLineStyle.AddItem("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");

comboLineWeight.AddItem("1");

comboLineWeight.AddItem("2");

comboLineWeight.AddItem("5");

comboLineWeight.AddItem("8");

comboLineWeight.AddItem("10");

comboLineWei

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1