using Asa;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Imaging;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using static Asa.eyemLib;

namespace CarerayImage_Test
{
    public partial class Form1 : Form
    {
        private Asa.XrayImage xrayImage;
        private Bitmap bmp;

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            xrayImage = new Asa.XrayImage("123", Asa.XrayImage.DeviceType.CARREY);
        }

        private void button1_Click(object sender, EventArgs e)
        {
            OpenFileDialog dlg = new OpenFileDialog { Filter = "RAW|*.raw" };
            if (dlg.ShowDialog() == DialogResult.Cancel) return;

            xrayImage.LoadRAW(dlg.FileName);
            //careray.RemoveCircle();
            bmp = xrayImage.Get48bImage();
            pictureBox1.Image = bmp;
        }

        private void numericUpDown1_ValueChanged(object sender, EventArgs e)
        {
            xrayImage.WindowWidth = Convert.ToInt32(numericUpDown1.Value);
            pictureBox1.Image = xrayImage.Get48bImage();
        }

        private void numericUpDown2_ValueChanged(object sender, EventArgs e)
        {
            xrayImage.WindowLevel = Convert.ToInt32(numericUpDown2.Value);
            pictureBox1.Image = xrayImage.Get48bImage();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            bool rtn = xrayImage.Open();
            MessageBox.Show(rtn.ToString());

        }

        private void button3_Click(object sender, EventArgs e)
        {
            bool rtn = xrayImage.Close();
            MessageBox.Show(rtn.ToString());
        }

        private void button4_Click(object sender, EventArgs e)
        {
            xrayImage.GetImage(3,3500);
           xrayImage.WindowWidth = Convert.ToInt32(numericUpDown1.Value);
            xrayImage.WindowLevel = Convert.ToInt32(numericUpDown2.Value);

            bmp = xrayImage.Get48bImage();
            pictureBox1.Image = bmp;

        }

        private void button5_Click(object sender, EventArgs e)
        {
            bmp.Save(Application.StartupPath + string.Format("\\png\\{0:HHmmss}", DateTime.Now) + ".png", System.Drawing.Imaging.ImageFormat.Png);

        }

        private void button6_Click(object sender, EventArgs e)
        {
            int w = 200;
            int h = 100;
            int count = w * h;

            byte[] buff = new byte[count * 4 * 2];
            int n = 0;
            int color = 65535;
            byte[] bb = BitConverter.GetBytes(color);


            for (int i = 0; i < count; i++)
            {
                buff[n++] = bb[0];
                buff[n++] = bb[1];
                buff[n++] = bb[0];
                buff[n++] = bb[1];
                buff[n++] = bb[0];
                buff[n++] = bb[1];
            }

            bmp = new Bitmap(w, h, System.Drawing.Imaging.PixelFormat.Format48bppRgb);
            System.Drawing.Imaging.BitmapData bmpData = bmp.LockBits(new Rectangle(0, 0, w, h), System.Drawing.Imaging.ImageLockMode.ReadWrite, bmp.PixelFormat);
            System.Runtime.InteropServices.Marshal.Copy(buff, 0, bmpData.Scan0, bmpData.Stride * h);
            bmp.UnlockBits(bmpData);
            pictureBox1.Image = bmp;
        }

        private void button7_Click(object sender, EventArgs e)
        {
            SaveFileDialog dlg = new SaveFileDialog();
            dlg.Filter = "RAW文件|*.raw";
            if (dlg.ShowDialog() == DialogResult.OK)
                xrayImage.SaveRAW(dlg.FileName);
        }

        private void button8_Click(object sender, EventArgs e)
        {
            OpenFileDialog openFileDialog = new OpenFileDialog();
            openFileDialog.Filter = "PNG文件|*.png";
            openFileDialog.Multiselect = true;
            if (openFileDialog.ShowDialog() == DialogResult.OK)
            {
                foreach (string path in openFileDialog.FileNames)
                {
                    Task.Run(() => {
                        //int n = XrayImage.GetLocalCount(path,200, out string count, out EyemImage tpDstImg);
                        //Console.WriteLine(count);
                        //int n = XrayImage.GetLocalCountTemplate(path, 20, out string count, out Bitmap BmpDstImg);
                        //Console.WriteLine(count);

                        //pictureBox1.Image = BmpDstImg;
                        Bitmap bitmap = new Bitmap(path);
                        BitmapData bmpData = bitmap.LockBits(new Rectangle(0, 0, bitmap.Width, bitmap.Height), ImageLockMode.ReadWrite, bitmap.PixelFormat);

                        var eyem = new EyemImage();
                        eyem.ucpImage = bmpData.Scan0;
                        eyem.iWidth = bitmap.Width;
                        eyem.iHeight = bitmap.Height;
                        eyem.iDepth = 2;
                        eyem.iChannels = 2;
                        int n = XrayImage.GetLocalCount(eyem, 200,"123", out string count, out EyemImage tpDstImg);
                        Console.WriteLine(count);
                    });
                    //MessageBox.Show(count);
                }
            }
            //int m = careray.GetLocalCountIrregular(path, 35, "4", 5, out string count, out Asa.API.EyemImage tpDstImg);
            //int n = careray.GetCount(2, 3, out int iObjCount, out Asa.API.EyemImage tpDstImg);

        }

        private void button9_Click(object sender, EventArgs e)
        {
            for (int i = 0; i < 20; i++)
            {
                eyemLib.EyemImage eyemImage = xrayImage.GetRawBufferHandle();
                int n = XrayImage.GetLocalCount(eyemImage,10, "123.png",  out string count, out _);
                xrayImage.FreeRawBufferHandle();
                Console.WriteLine(count);
            }
        }
    }
}