首页 > 解决方案 > 使用侦听器时查看哪个像素发生变化的最快方法

问题描述

我正在尝试使用 STEM 获取每个扫描像素的 EDS 光谱。我正在使用该EDSStartAcquisition( 2048, 10,fexposure*2, 1)命令,并将以下简单的侦听器对象附加到所示的 1D 频谱图像中:

string messagemap = "data_value_changed:MyImageAction"  
    Class MyListenerClass1
    {
    String event_desc;

    MyListenerClass1(Object self); //Result("\n");
    ~MyListenerClass1(Object self);// Result("\n");
    
        
        Void MyImageAction(Object self, Number e_fl, Image Img)
        {   
        ImageGetEventMap().DeconstructEventFlags( e_fl, event_desc )
        Result(GetTime(1)+": Image message : " + event_desc + " 0x" + Binary(e_fl) + "\n" ) 
        }
    }

ListenerID1 = EDSIm.ImageAddEventListener( Listener1, messagemap)

由于速度是这里的问题,我想尝试 EDS 采集的连续模式。但是然后我需要听哪些计数属于每个扫描的像素。以下主题(如何全速获取获取的帧?-图像事件侦听器似乎没有在每个事件之后执行)展示了如何侦听图像的最后一个像素变化。但是,直接查看每个事件中 1D 频谱的哪一部分发生变化的最快方法是什么?无需遍历每一片...

提前致谢!

标签: event-listenerdm-script

解决方案


图像的data_value_changed会在以下情况下触发: a) 释放图像锁(确保对内存进行单一访问的对象),或 b) 在代码中进行特定的更新调用。

因此,当获取累积 EDS 光谱时,整个阵列会“锁定”,然后修改(在一个或多个位置),然后“更新”。没有关于阵列被修改的位置的具体信息。

因此,找出频谱变化位置的唯一方法是将“之前”的副本与“现在”的副本进行比较 - 这不是超级有效的。


推荐阅读