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的差值……

  • 相关阅读:
    JBoss 性能优化(解决Jboss内存紧张的问题)
    JBOSS最大连接数配置和jvm内存配置
    DWR与AJAX
    使AJAX调用尽可能利用缓存特性
    Java Map各遍历方式的性能比较
    java cache过期策略两种实现,一个基于list轮询一个基于timer定时
    自己动手实现java中cache
    Java实现cache的基本机制
    jvm垃圾回收的时间问题
    nginx的健康检查功能将挂掉的Tomcat舍弃
  • 原文地址:https://www.cnblogs.com/xqzhao/p/1048409.html
Copyright © 2011-2022 走看看