Asp.Net教程,WinForm教程,Asp.Net MVC,vs2008教程,vs2010教程,Silverlight技术,源码下载,Asp.Net视频教程
全站热门标签
vs2010 Silverlight 存储过程 水晶报表 ADO.NET JavaScript LINQ AjaxPro DataGridView 面向对象 Extjs GridView XML DevExpress HTML教程 Oracle jQuery 分页 GDI+ Visual C++2010 MySQL Office2010 WPF MVC Dojo WCF4.0 VB.NET Sql2005 textbox cookie WCF WinForm Discuz!NT SQL经典语句 T-SQL checkbox ASPxGridView F# asp.net SQL VS2008新特性 DropDownList Access TreeView Ajax VS2008 页面执行时间 Flex 字符串 回调 VB2005 DataSet C#时间 ASP.NET性能优化 用户在线检测 动画
当前位置: 主页 > vs2010教程 >

基于Visual C#2010开发Windows7应用 多点触摸图片处理应用程序(2)-使用多点触摸操作处理图片(2)

时间:2010-07-28 12:47来源:blog.csdn.net/yincheng01 作者:admin 点击:

4. 编译并运行代码。尝试同时操作多张图片。

任务 6 – 添加 PictureTracker 缓存


当用户首次触摸一张图片时,应用程序创建一个新 PictureTracker 实例,该实例然后创建 ManipulationProcessor COM 对象。只要用户移开触摸该图片的最后一个指头(触摸 ID),PictureTracker 实例就会被当作垃圾收集,进而释放底层 COM 对象。分析常见的应用程序使用情形就会发现,只有少数图片可能被同时操作。据此可以得出结论:我们需要 PictureTracker 实例的一个缓存。该缓存将包含空闲的 PictureTracker 实例。当(发生 ProcessDown 事件时)需要新 PictureTracker 实例时,我们将首先尝试从缓存拉取实例,只有当缓存为空时才生成新实例。当完成对图片的操作时,我们将 PictureTracker 实例移入缓存。因为 ManipulationCompleted 是一个 ManipulationProcessor 事件,所以我们将要求 PictureTracker 处理该事件并将其转发给 PictureTrackerManager。这需要一个从 PictureTracker 到它的 PictureTrackerManager 的新引用(我们使用构造函数来传递该引用)。

1. 将堆栈数据成员添加到 PictureTrackerManager 类的开头:

class PictureTrackerManager  
 
{  
 
    //Cache for re-use of picture trackers   
 
    private readonly Stack<PictureTracker> _pictureTrackers = new Stack<PictureTracker>();  
 
... 
2.  更改 GetPictureTracker() 函数。我们需要使用缓存,还需要将此引用传递给 PictureTracker 构造函数:

private PictureTracker GetPictureTracker(int touchId, Point location)  
 
{  
 
...  
 
   //First time  
 
   if (pictureTracker == null)  
 
    {  
 
        //take from stack  
 
        if (_pictureTrackers.Count > 0)  
 
            pictureTracker = _pictureTrackers.Pop();  
 
        else //create new  
 
            pictureTracker = new PictureTracker(this);         
 
        pictureTracker.Picture = picture;  
 
        BringPictureToFront(picture);  
 
    }  
 
...  
 

 

3. 添加一个逻辑,以在操作完成时将 PictureTracker 实例推回堆栈中。将以下代码粘贴到 PictureTrackerManager 类中。

C#  
 
//Manipulation is completed, we can reuse the object  
 
public void Completed(PictureTracker pictureTracker)  
 
{  
 
    pictureTracker.Picture = null;  
 
    _pictureTrackers.Push(pictureTracker);  
 

 

4.  现在需要更改 PictureTracker 类,使其适应 PictureTrackerManager 中的代码更改。
a.  将 PictureTrackerManager 实例获取到构造函数中,然后存储它。

class PictureTracker  
 
{  
 
    private readonly ManipulationProcessor _processor =  
 
        new ManipulationProcessor(ProcessorManipulations.ALL);  
 
    private readonly PictureTrackerManager _pictureTrackerManager;  
 
    public PictureTracker(PictureTrackerManager pictureTrackerManager)  
 
    {  
 
        _pictureTrackerManager = pictureTrackerManager;  
 
... 
 

b. 在 ManipulationCompleted 事件中调用 PictureTrackerManager.Completed 函数:

public PictureTracker(PictureTrackerManager pictureTrackerManager)  
 
{  
 
    _pictureTrackerManager = pictureTrackerManager;  
 
    _processor.ManipulationCompleted += (s, e) =>   
 
    {  
 
        System.Diagnostics.Trace.WriteLine("Manipulation has completed: " + Picture.ImagePath);  
 
        _pictureTrackerManager.Completed(this);  
 
    };  
 
... 
(责任编辑:admin)

Tags:图片处理 C#2010
责任编辑:admin
返回顶部
------分隔线----------------------------
推荐内容
骆驼户外男 真皮磨砂日常休闲鞋 低帮 2011秋冬新款 专柜正品特价 骆驼户外男 真皮磨砂日常休闲鞋 低帮 2011秋冬新款 专柜正品特价