示例#1
0
        private void ThreadProc()
        {
            uint StrAddr   = 0;
            uint Size_Byte = 0;

            hEvent.Handle = Event; // Set the Handle to the event from
            while (true)
            {
                hEvent.WaitOne();
                hEvent.Reset();
                if (ISR_ON == false) //don't use "while(ISR_ON)"
                {
                    break;           //because it will capture 2 pictures in one_shot mode by disconstruct
                }
                Angelo.AngeloRTV_Get_Frame(PortNo, ref StrAddr, ref width, ref height, ref Size_Byte);
                HOperatorSet.GenEmptyObj(out ho_Image);
                ho_Image.Dispose();
                //  HOperatorSet.GenImage1(out ho_Image, "byte", (int)width, (int)height, (int)StrAddr);
                HTuple Width1, Height1;
                HOperatorSet.GenImageInterleaved(out ho_Image, (int)StrAddr, "bgr", width, height, 0, "byte", width, height, 0, 0, -1, 0);
                //获取图像大小
                HOperatorSet.GetImageSize(ho_Image, out Width1, out Height1);
                //显示全图
                //以适应窗口方式显示图像
                HOperatorSet.SetPart(this.hWindowControl1.HalconID, 0, 0, Height1 - 1, Width1 - 1);
                HOperatorSet.DispObj(ho_Image, this.hWindowControl1.HalconWindow);
                monitorTest(signal.TestBegin);
            }
        }
示例#2
0
        private void ModelSetUp_Load(object sender, EventArgs e)
        {
            mycallback = new CallBack(CallBackProc);
            comboBox_channel.SelectedIndex = 0;
            comboBox_port.SelectedIndex    = 1;
            comboBox_format.SelectedIndex  = 0;
            comboBox_color.SelectedIndex   = 3;

            HOperatorSet.GenEmptyObj(out m_Image);
            HOperatorSet.GenEmptyObj(out m_objDisp);
            m_hWindowHandle = hWindowControl1.HalconID;
            m_AcqHandle     = vision.CamParam.m_AcqHandle;
            HOperatorSet.SetDraw(m_hWindowHandle, "margin");
            HOperatorSet.SetColored(m_hWindowHandle, 12);
            HOperatorSet.SetColor(m_hWindowHandle, "red");
            //设置halcon内部处理的图像的宽度和高度
            HOperatorSet.SetSystem("tsp_width", 3000);
            HOperatorSet.SetSystem("tsp_height", 3000);
            for (ushort i = 0; i < MaxPort; i++)//initialize each port
            {
                if (Angelo.AngeloRTV_Initial(i) != 0)
                {
                    MessageBox.Show("Total No. of AngeloRTV Port = " + i.ToString());
                    break;
                }
            }
        }
示例#3
0
 private void stopButton_Click(object sender, EventArgs e)
 {
     for (ushort i = 0; i < MaxPort; i++)
     {
         Angelo.AngeloRTV_Capture_Stop(i);
     }
 }
 public void Read(BinaryReader br, int i)
 {
     ID = i;
     if (i == 1)
     {
         Angelo = Angelo.Angel_Wing;
     }
     else
     {
         Angelo = Angelo.None;
     }
     Name = Memory.Strings.Read(Strings.FileID.KERNEL, id, i * 2);
     //0x0000	2 bytes Offset to name
     Description = Memory.Strings.Read(Strings.FileID.KERNEL, id, i * 2 + 1);
     //0x0002	2 bytes Offset to description
     br.BaseStream.Seek(4, SeekOrigin.Current);
     Unknown0 = new BitArray(br.ReadBytes(1));
     //0x0004  1 byte Unknown Flags
     Target = (Target)br.ReadByte();
     //0x0005  1 byte Target
     AbilityID = br.ReadByte();
     //0x0006  1 byte Ability data ID
     Unknown1 = br.ReadByte();
     //0x0007  1 byte Unknown / Unused
 }
            public void Read(BinaryReader br, int i)
            {
                ID = i;
                switch (i)
                {
                case 11:
                    Angelo = Angelo.Rush;
                    break;

                case 12:
                    Angelo = Angelo.Recover;
                    break;

                case 13:
                    Angelo = Angelo.Reverse;
                    break;

                case 14:
                    Angelo = Angelo.Search;
                    break;

                default:
                    Angelo = Angelo.None;
                    break;
                }
                Name = Memory.Strings.Read(Strings.FileID.KERNEL, id, i);
                int n = Name.Length;

                br.BaseStream.Seek(2, SeekOrigin.Current);
                //0x0000	2 bytes Offset to GF attack name
                MagicID = (Magic_ID)br.ReadUInt16();
                //0x0002	2 bytes Magic ID(decides what animation to play)
                Attack_Type = (Attack_Type)br.ReadByte();
                //0x0004	1 byte Attack type
                GF_Power = br.ReadByte();
                //0x0005	1 byte GF power(used in damage formula)
                Status_Attack = br.ReadByte();
                //0x0006	1 byte Status attack enabler
                Unknown0 = br.ReadByte();
                //0x0007	1 byte Unknown
                Status_flags = br.ReadByte();
                //0x0008	1 byte Status flags ?
                Unknown1 = br.ReadBytes(2);
                //0x0009	2 bytes Unknown
                Element = (Element)br.ReadByte();
                //0x000B	1 byte Element
                Statuses1 = (Battle_Only_Statuses)br.ReadUInt32();
                //0x000C	1 byte Status 1
                //0x000D	1 byte Status 2
                //0x000E	1 byte Status 3
                //0x000F	1 byte Status 4
                Statuses0 = (Persistent_Statuses)br.ReadUInt16();
                //0x0010	1 byte Status 5
                //0x0011	1 byte Unknown
                Power_Mod = br.ReadByte();
                //0x0012	1 byte Power Mod(used in damage formula)
                Level_Mod = br.ReadByte();
                //0x0013	1 byte Level Mod(used in damage formula)
            }
示例#6
0
 private void stopTestButton_Click(object sender, EventArgs e)
 {
     this.begionButton.Enabled   = true;
     this.stopTestButton.Enabled = false;
     for (ushort i = 0; i < MaxPort; i++)
     {
         Angelo.AngeloRTV_Capture_Stop(i);
     }
 }
示例#7
0
        private void capture()
        {
            for (ushort i = 0; i < MaxPort; i++)
            {
                Angelo.AngeloRTV_Capture_Stop(i);
            }
            ushort Multi;

            PortNo       = ushort.Parse(comboBox_port.SelectedItem.ToString());//selected port
            Channel      = ushort.Parse(comboBox_channel.SelectedItem.ToString());
            Multi        = (ushort)System.Math.Pow(2, Channel);
            Video_Format = (byte)(comboBox_format.SelectedIndex);
            switch (comboBox_color.SelectedIndex)//selected color format
            {
            default:
            case 0:    //gray
                Color_Format = 1;
                Byte_Pixel   = 1;
                color        = System.Drawing.Imaging.PixelFormat.Format8bppIndexed;
                break;

            case 1:    //rgb15
                Color_Format = 2;
                Byte_Pixel   = 2;
                color        = System.Drawing.Imaging.PixelFormat.Format16bppRgb555;
                break;

            case 2:    //rgb16
                Color_Format = 0;
                Byte_Pixel   = 2;
                color        = System.Drawing.Imaging.PixelFormat.Format16bppRgb565;
                break;

            case 3:    //rgb24
                Color_Format = 3;
                Byte_Pixel   = 3;
                color        = System.Drawing.Imaging.PixelFormat.Format24bppRgb;
                break;

            case 4:    //rgb32
                Color_Format = 4;
                Byte_Pixel   = 4;
                color        = System.Drawing.Imaging.PixelFormat.Format32bppRgb;
                break;
            }
            Angelo.AngeloRTV_Set_Callback(PortNo, null);
            Angelo.AngeloRTV_Set_Callback(PortNo, mycallback);//connect CallBackProc Function though mycallback
            Angelo.AngeloRTV_Set_Color_Format(PortNo, Color_Format);
            Angelo.AngeloRTV_Set_Video_Format(PortNo, Video_Format);
            Angelo.AngeloRTV_Select_Channel(PortNo, Multi);
        }
 private RinoaLimitBreaksPart1(BinaryReader br, int i)
 {
     RinoaLimitID = i;
     Angelo       = i == 1 ? Angelo.Angel_Wing : Angelo.None;
     //0x0000	2 bytes Offset to name
     Name = Memory.Strings.Read(Strings.FileID.Kernel, ID, i * 2);
     //0x0002	2 bytes Offset to description
     Description = Memory.Strings.Read(Strings.FileID.Kernel, ID, i * 2 + 1);
     br.BaseStream.Seek(4, SeekOrigin.Current);
     //0x0004  1 byte Unknown Flags
     Unknown0 = new BitArray(br.ReadBytes(1));
     //0x0005  1 byte Target
     Target = (Target)br.ReadByte();
     //0x0006  1 byte Ability data ID
     AbilityID = br.ReadByte();
     //0x0007  1 byte Unknown / Unused
     Unknown1 = br.ReadByte();
 }
示例#9
0
        private void CallBackProc(IntPtr BufferAddress, ushort PortNo)
        {
            uint StrAddr   = 0;
            uint Size_Byte = 0;

            Angelo.AngeloRTV_Get_Frame(PortNo, ref StrAddr, ref width, ref height, ref Size_Byte);

            HOperatorSet.GenEmptyObj(out m_Image);
            m_Image.Dispose();
            HTuple Width1, Height1;

            HOperatorSet.GenImageInterleaved(out m_Image, (int)StrAddr, "bgr", width, height, 0, "byte", width, height, 0, 0, -1, 0);
            //获取图像大小
            HOperatorSet.GetImageSize(m_Image, out Width1, out Height1);
            //显示全图
            //以适应窗口方式显示图像
            HOperatorSet.SetPart(this.hWindowControl1.HalconID, 0, 0, Height1 - 1, Width1 - 1);
            HOperatorSet.DispObj(m_Image, this.hWindowControl1.HalconWindow);
        }
示例#10
0
        /// <summary>
        /// Test if an ability can trigger for Angelo.
        /// </summary>
        /// <param name="ability"></param>
        /// <returns></returns>
        private static bool TestAngeloAbilityTriggers(Angelo ability)
        {
            //else if (8 >= [0..255] Angelo Recover is used (3.3 %)
            //else if (2 >= [0..255] Angelo Reverse is used (1 %)
            //else if (8 >= [0..255] Angelo Search is used (3.2 %)
            //Angelo_Disabled I think is set when Rinoa is in space so angelo is out of reach;
            //https://gamefaqs.gamespot.com/ps/197343-final-fantasy-viii/faqs/25194
            if (Memory.State.BattleMiscFlags.HasFlag(Saves.BattleMiscFlags.AngeloDisabled) ||
                !Memory.State.PartyData.Contains(Characters.Rinoa_Heartilly) ||
                !Memory.State.LimitBreakAngeloCompleted.HasFlag(ability))
            {
                return(false);
            }
            else
            {
                switch (ability)
                {
                case Angelo.Recover:
                    return(Memory.State.Characters.Any(x => x.Value.IsCritical && !x.Value.IsDead && Memory.State.PartyData.Contains(x.Key)) && Memory.Random.Next(256) < 8);

                case Angelo.Reverse:
                    return(Memory.State.Characters.Any(x => x.Value.IsDead && Memory.State.PartyData.Contains(x.Key)) && Memory.Random.Next(256) < 2);

                case Angelo.Search:
                    Saves.CharacterData c = Memory.State[Characters.Rinoa_Heartilly];
                    if (!(c.IsGameOver ||
                          c.Statuses1.HasFlag(Kernel_bin.Battle_Only_Statuses.Sleep) ||
                          c.Statuses1.HasFlag(Kernel_bin.Battle_Only_Statuses.Stop) ||
                          c.Statuses1.HasFlag(Kernel_bin.Battle_Only_Statuses.Confuse) ||
                          c.Statuses0.HasFlag(Kernel_bin.Persistent_Statuses.Berserk) ||
                          c.Statuses1.HasFlag(Kernel_bin.Battle_Only_Statuses.Angel_Wing)))
                    {
                        return(Memory.Random.Next(256) < 8);
                    }
                    break;
                }
            }
            return(false);
        }
示例#11
0
 private void MainForm_FormClosed(object sender, FormClosedEventArgs e)
 {
     try
     {
         if (mythread != null)
         {
             ISR_ON = false;
             hEvent.Set();
             mythread.Join();
             mythread = null;
         }
         for (ushort i = 0; i < MaxPort; i++)
         {
             Angelo.AngeloRTV_Set_Callback(i, null);
             Angelo.AngeloRTV_Capture_Stop(i);
             Angelo.AngeloRTV_Close(i);
         }
     }
     catch (Exception ex)
     {
         throw ex;
     }
 }
示例#12
0
 private void begionButton_Click(object sender, EventArgs e)
 {
     if (modelTextBox.Text != "" && selectCameraVersion.Text != "")
     {
         this.begionButton.Enabled   = false;
         this.stopTestButton.Enabled = true;
         DataTable tempTable = databaseOperate.FindData("摄像头模板", "'" + modelTextBox.Text + "'", "模板名称");
         string    path      = tempTable.Rows[0]["模板保存路径"].ToString();
         HOperatorSet.ReadShapeModel(path, out Vision.Model.m_ModelID);
         if (comboBox_port.Text != "" && comboBox_interrupt.Text != "" && comboBox_format.Text != "" && comboBox_color.Text != "")
         {
             capture();
             Angelo.AngeloRTV_Capture_Start(PortNo, 0xFFFFFFFF);
         }
         else
         {
             MessageBox.Show("参数输入不全!!!!");
         }
     }
     else
     {
         MessageBox.Show("未选择模板!!!");
     }
 }
示例#13
0
        /// <summary>
        /// Test if an ability can trigger for Angelo.
        /// </summary>
        /// <param name="ability"></param>
        /// <returns></returns>
        private static bool TestAngeloAbilityTriggers(Angelo ability)
        {
            //else if (8 >= [0..255] Angelo Recover is used (3.3 %)
            //else if (2 >= [0..255] Angelo Reverse is used (1 %)
            //else if (8 >= [0..255] Angelo Search is used (3.2 %)
            //Angelo_Disabled I think is set when Rinoa is in space so angelo is out of reach;
            //https://gamefaqs.gamespot.com/ps/197343-final-fantasy-viii/faqs/25194
            if (Memory.State.BattleMiscFlags.HasFlag(Saves.BattleMiscFlags.AngeloDisabled) ||
                !Memory.State.Party.Contains(Characters.Rinoa_Heartilly) ||
                !Memory.State.LimitBreakAngeloCompleted.HasFlag(ability))
            {
                return(false);
            }
            switch (ability)
            {
            case Angelo.Recover:
                //Characters.Any(x => x.Value.IsCritical && !x.Value.IsDead && Memory.State.PartyData.Contains(x.Key))
                return(!Memory.State.AnyDeadPartyMembers && Memory.State.AnyCriticalPartyMembers && Memory.Random.Next(256) < 8);

            case Angelo.Reverse:
                return(Memory.State.AnyDeadPartyMembers && Memory.Random.Next(256) < 2);

            case Angelo.Search:
                var c = Memory.State[Characters.Rinoa_Heartilly];
                if (!(c.IsGameOver ||

                      c.Statuses1.HasFlag(BattleOnlyStatuses.Sleep) ||
                      c.Statuses1.HasFlag(BattleOnlyStatuses.Stop) ||
                      c.Statuses1.HasFlag(BattleOnlyStatuses.Confuse) ||
                      c.Statuses0.HasFlag(PersistentStatuses.Berserk) ||
                      c.Statuses1.HasFlag(BattleOnlyStatuses.AngelWing)))
                {
                    return(Memory.Random.Next(256) < 8);
                }
                break;

            case Angelo.None:
                break;

            case Angelo.Rush:
                break;

            case Angelo.Cannon:
                break;

            case Angelo.Strike:
                break;

            case Angelo.Invincible_Moon:
                break;

            case Angelo.Wishing_Star:
                break;

            case Angelo.Angel_Wing:
                break;

            default:
                throw new ArgumentOutOfRangeException(nameof(ability), ability, null);
            }
            return(false);
        }
示例#14
0
        private void MainForm_Load(object sender, EventArgs e)
        {
            this.resultTextBox.ForeColor = System.Drawing.Color.Red;
            selectCameraVersion.Items.Add("全景");
            selectCameraVersion.Items.Add("其他");
            signal.printControl   = true;
            signal.InputParameter = false;
            staticForm            = this;
            this.groupBox2.Hide();
            mycallback = new CallBack(CallBackProc);
            handle     = this.Handle;

            HOperatorSet.GenEmptyObj(out m_Image);
            HOperatorSet.GenEmptyObj(out m_objDisp);
            m_hWindowHandle = hWindowControl1.HalconID;
            m_AcqHandle     = Vision.CamParam.m_AcqHandle;
            HOperatorSet.SetDraw(m_hWindowHandle, "margin");
            HOperatorSet.SetColored(m_hWindowHandle, 12);
            HOperatorSet.SetColor(m_hWindowHandle, "red");
            //设置halcon内部处理的图像的宽度和高度
            HOperatorSet.SetSystem("tsp_width", 3000);
            HOperatorSet.SetSystem("tsp_height", 3000);
            try
            {
                DataBaseOperate.OpenConnection();  //打开数据库
                DataBaseOperate.CloseConnection(); //关闭数据库
            }
            catch
            {
                MessageBox.Show("数据库连接失败。", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                System.Windows.Forms.Application.Exit();
            }

            Control.CheckForIllegalCrossThreadCalls = false;
            #region      对plc连接信号赋值
            //读CIO1100.00位的数据命令********摄像头检测开始
            plcCameraTestBegin[0]  = 0x80;
            plcCameraTestBegin[1]  = 0x00;
            plcCameraTestBegin[2]  = 0x02;
            plcCameraTestBegin[3]  = 0x00;
            plcCameraTestBegin[4]  = 0x01;
            plcCameraTestBegin[5]  = 0x00;
            plcCameraTestBegin[6]  = 0x00;
            plcCameraTestBegin[7]  = 0x0A;
            plcCameraTestBegin[8]  = 0x00;
            plcCameraTestBegin[9]  = 0x00;
            plcCameraTestBegin[10] = 0x01;
            plcCameraTestBegin[11] = 0x01;
            plcCameraTestBegin[12] = 0x30;
            plcCameraTestBegin[13] = 0x04;
            plcCameraTestBegin[14] = 0x4C;
            plcCameraTestBegin[15] = 0x00;
            plcCameraTestBegin[16] = 0x00;
            plcCameraTestBegin[17] = 0x01;
            //写CIO1100.00位的数据命令********复位摄像头检测开始位
            plcCameraTestReset[0]  = 0x80;
            plcCameraTestReset[1]  = 0x00;
            plcCameraTestReset[2]  = 0x02;
            plcCameraTestReset[3]  = 0x00;
            plcCameraTestReset[4]  = 0x01;
            plcCameraTestReset[5]  = 0x00;
            plcCameraTestReset[6]  = 0x00;
            plcCameraTestReset[7]  = 0x0A;
            plcCameraTestReset[8]  = 0x00;
            plcCameraTestReset[9]  = 0x00;
            plcCameraTestReset[10] = 0x01;
            plcCameraTestReset[11] = 0x02;
            plcCameraTestReset[12] = 0x30;
            plcCameraTestReset[13] = 0x04;
            plcCameraTestReset[14] = 0x4C;
            plcCameraTestReset[15] = 0x00;
            plcCameraTestReset[16] = 0x00;
            plcCameraTestReset[17] = 0x01;
            plcCameraTestReset[18] = 0x00;

            //读CIO1102.00位的数据命令********条码打印开始
            plcPrinterBegin[0]  = 0x80;
            plcPrinterBegin[1]  = 0x00;
            plcPrinterBegin[2]  = 0x02;
            plcPrinterBegin[3]  = 0x00;
            plcPrinterBegin[4]  = 0x01;
            plcPrinterBegin[5]  = 0x00;
            plcPrinterBegin[6]  = 0x00;
            plcPrinterBegin[7]  = 0x0A;
            plcPrinterBegin[8]  = 0x00;
            plcPrinterBegin[9]  = 0x00;
            plcPrinterBegin[10] = 0x01;
            plcPrinterBegin[11] = 0x01;
            plcPrinterBegin[12] = 0x30;
            plcPrinterBegin[13] = 0x04;
            plcPrinterBegin[14] = 0x4E;
            plcPrinterBegin[15] = 0x00;
            plcPrinterBegin[16] = 0x00;
            plcPrinterBegin[17] = 0x01;

            //写CIO1102.00位的数据命令********复位条码打印开始位
            plcPrinterReset[0]  = 0x80;
            plcPrinterReset[1]  = 0x00;
            plcPrinterReset[2]  = 0x02;
            plcPrinterReset[3]  = 0x00;
            plcPrinterReset[4]  = 0x01;
            plcPrinterReset[5]  = 0x00;
            plcPrinterReset[6]  = 0x00;
            plcPrinterReset[7]  = 0x0A;
            plcPrinterReset[8]  = 0x00;
            plcPrinterReset[9]  = 0x00;
            plcPrinterReset[10] = 0x01;
            plcPrinterReset[11] = 0x02;
            plcPrinterReset[12] = 0x30;
            plcPrinterReset[13] = 0x04;
            plcPrinterReset[14] = 0x4E;
            plcPrinterReset[15] = 0x00;
            plcPrinterReset[16] = 0x00;
            plcPrinterReset[17] = 0x01;
            plcPrinterReset[18] = 0x00;

            //写CIO1101.00位的数据命令********摄像头OK信号
            plcCameraTestOK[0]  = 0x80;
            plcCameraTestOK[1]  = 0x00;
            plcCameraTestOK[2]  = 0x02;
            plcCameraTestOK[3]  = 0x00;
            plcCameraTestOK[4]  = 0x01;
            plcCameraTestOK[5]  = 0x00;
            plcCameraTestOK[6]  = 0x00;
            plcCameraTestOK[7]  = 0x0A;
            plcCameraTestOK[8]  = 0x00;
            plcCameraTestOK[9]  = 0x00;
            plcCameraTestOK[10] = 0x01;
            plcCameraTestOK[11] = 0x02;
            plcCameraTestOK[12] = 0x30;
            plcCameraTestOK[13] = 0x04;
            plcCameraTestOK[14] = 0x4D;
            plcCameraTestOK[15] = 0x00;
            plcCameraTestOK[16] = 0x00;
            plcCameraTestOK[17] = 0x01;
            plcCameraTestOK[18] = 0x01;


            #endregion
            //创建(实例化)线程,将需要执行的函数(方法-过程)传入线程中
            this.threadInBack = new Thread(new ThreadStart(PLCConnection));   //3
            //设置线程为后台线程(随着主线程(窗体线程)的退出而退出)
            this.threadInBack.IsBackground = true;
            this.threadInBack.Start();
            comboBox_color.SelectedIndex     = 3;
            comboBox_port.SelectedIndex      = 1;
            comboBox_format.SelectedIndex    = 0;
            comboBox_channel.SelectedIndex   = 0;
            comboBox_interrupt.SelectedIndex = 1;
            step       = 1;
            step_print = 1;

            for (ushort i = 0; i < MaxPort; i++)//initialize each port
            {
                if (Angelo.AngeloRTV_Initial(i) != 0)
                {
                    MessageBox.Show("Total No. of AngeloRTV Port = " + i.ToString());
                    break;
                }
            }
        }
示例#15
0
 private void continueButton_Click(object sender, EventArgs e)
 {
     capture();
     Angelo.AngeloRTV_Capture_Start(PortNo, 0xFFFFFFFF);
 }
示例#16
0
 private void collectModelToolStripButton_Click(object sender, EventArgs e)
 {
     capture();
     Angelo.AngeloRTV_Capture_Start(PortNo, 0x01);
 }
示例#17
0
        private void capture()
        {
            for (ushort i = 0; i < MaxPort; i++)
            {
                Angelo.AngeloRTV_Capture_Stop(i);
            }
            ushort Multi;

            PortNo       = ushort.Parse(comboBox_port.SelectedItem.ToString());    //selected port
            Channel      = ushort.Parse(comboBox_channel.SelectedItem.ToString()); //selected channel
            Multi        = (ushort)System.Math.Pow(2, Channel);
            Video_Format = (byte)(comboBox_format.SelectedIndex);                  //selected Video format

            switch (comboBox_color.SelectedIndex)                                  //selected color format
            {
            default:
            case 0:    //gray
                Color_Format = 1;
                Byte_Pixel   = 1;
                color        = System.Drawing.Imaging.PixelFormat.Format8bppIndexed;
                break;

            case 1:    //rgb15
                Color_Format = 2;
                Byte_Pixel   = 2;
                color        = System.Drawing.Imaging.PixelFormat.Format16bppRgb555;
                break;

            case 2:    //rgb16
                Color_Format = 0;
                Byte_Pixel   = 2;
                color        = System.Drawing.Imaging.PixelFormat.Format16bppRgb565;
                break;

            case 3:    //rgb24
                Color_Format = 3;
                Byte_Pixel   = 3;
                color        = System.Drawing.Imaging.PixelFormat.Format24bppRgb;
                break;

            case 4:    //rgb32
                Color_Format = 4;
                Byte_Pixel   = 4;
                color        = System.Drawing.Imaging.PixelFormat.Format32bppRgb;
                break;
            }

            #region disconstruct



            Angelo.AngeloRTV_Set_Callback(PortNo, null);
            if (mythread != null)
            {
                ISR_ON = false;  //let ThreadProc go out the loop
                hEvent.Set();
                mythread.Join(); //mainthread will continue afer other threads ending
                mythread = null;
            }
            #endregion

            if (comboBox_interrupt.SelectedIndex == 1)//selected callback or thread
            {
                ISR_ON = true;
                Angelo.AngeloRTV_Set_Int_Event(PortNo, ref Event);  //set dll event
                mythread = new Thread(new ThreadStart(ThreadProc)); //create thread
                mythread.Start();                                   //start thread
            }
            else
            {
                Angelo.AngeloRTV_Set_Callback(PortNo, mycallback);//connect CallBackProc Function though mycallback
            }
            Angelo.AngeloRTV_Set_Color_Format(PortNo, Color_Format);
            Angelo.AngeloRTV_Set_Video_Format(PortNo, Video_Format);
            Angelo.AngeloRTV_Select_Channel(PortNo, Multi);
        }