zoukankan      html  css  js  c++  java
  • C#中GDI+功能扩展:区域图像选择功能

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

    程序说明     
          在大部分的图像处理应用程序(如Adobe's Photoshop, Google's Picasa or Coral's Paint Shop Pro)中,它们都需要能够选择图片的一个部分。或许用户希望放大图像的这个区域,或者是将要对这块被选取进一步处理。
          无论是那个应用,大部分的图像处理软件都需要支持这个功能。当我们在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的差值……

  • 相关阅读:
    分布式机器学习:算法、理论与实践——【1】
    LLVM Cookbook
    【前端】Webpack 进阶
    Noip2015 运输计划 树上差分 二分答案
    bzoj 2259: [Oibh]新型计算机 最短路 建模
    888E
    [ZJOI2012]旅游 对偶图 树的直径
    [HAOI2007]理想的正方形 单调队列 暴力
    bzoj1457: 棋盘游戏 SG函数 Nim
    Bomb HDU
  • 原文地址:https://www.cnblogs.com/xqzhao/p/1048409.html
Copyright © 2011-2022 走看看