C#中GDI+功能扩展:区域图像选择功能

icscs 著于 发表 2008-1-13
C#,.NET 2.0
原文地址:http://www.msproject.cn/article/Image_Range_Select.aspx

翻译
英文原文Dr.Sai著
A C# Sample Code/Article Extending the Capabilities of GDI+ in C# (.NET)(原代碼地址)
icscs翻译for msproject.cn

摘要
在大部分的图像处理应用程序(如Adobe's Photoshop, Google's Picasa or Coral's Paint Shop Pro)中,它们都需要能够选择图片的一个部分。或许用户希望放大图像的这个区域,或者是将要对这块被选取进一步处理(见下图1)。

无论是那个应用,大部分的图像处理软件都需要支持这个功能。当我们在MFC框架下面编写程序的时候,它们通过CDC类的DrawDragRect (…). DrawDragRect (…) API来实现。

尽管,几乎所有的MFC的API都对应于Win32的API,然而,微软尽然没有提供一个对应于MFC中DrawDragRect (…) API的Win32 API。于是,在.net框架下面,就产生了这个问题,因为,我们找不到一个这样的API。

因此,当我们用C#编写一个图像处理软件的时候,这个问题变得非常突出,没有一个DrawDragRect (…) 类似的API来完成图像选择功能。而且,找不到一个能通过pInvoke调用的WIN32的api。这篇文章用C#语言实现了DrawDragRect (…) API,你可以很容易地在你的程序中调用它。


实现细节

整个代码嵌在CDrawDragRect.cs 文件中,实现于CDrawDragRect类里。如果你的程序需要使用这样的功能,只需要把你的程序从以前的Form集成,改到CDrawDragRect的集成关系就可以了。


   
   
public   partial   class  MainForm : CDrawDragRect
// Form
{
    ...
    
//other implementation details skipped for brevity

}

另外,你还需要做一件事情:在CDrawDragRect类里void DrawDragRect(MouseEventArgs e)函数是处理这个功能的,它在鼠标事件OnMouseMove(MouseEventArgs e)发生时,响应其动作。

DrawDragRect(MouseEventArgs e)函数,首先创建4个Windows区域:
rgnOld
rgnNew
rgnDiff
rgnDiffOld

rgnDiff记录了rgnOld 和rgnNew的差值……

具体更细的原理,大家见原文吧:)

关于示例程序

实例是用C#写的一个基于Form对程序,它显示一个文件打开对话框,打开一个图像文件。当用户选择一个图像文件之后,他可以选择图像的一个小区域,这个小区域就会被发送到另外一个form上单独显示。

License

The Code Project Open License (CPOL)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值