public BlobView(ShapeAnalyzer shapeAnalyzer, PoreAnalyzeData data)
 {
     InitializeComponent();
     pictureBox1.Image = data.Bmp;
     listBox1.Items.Add($"Moment invariant 1: {Convert.ToDecimal(data.GeometricMoment1)}");
     listBox1.Items.Add($"Moment invariant 2: {Convert.ToDecimal(data.GeometricMoment2)}");
     listBox1.Items.Add($"Moment invariant 3: {Convert.ToDecimal(data.GeometricMoment3)}");
     listBox1.Items.Add($"Moment invariant 7: {Convert.ToDecimal(data.GeometricMoment7)}");
     listBox1.Items.Add($"Malinowska's coefficient: {Convert.ToDecimal(data.MalinowskasCoefficient)}");
     listBox1.Items.Add($"Area: {Convert.ToDecimal(data.Area)}");
     listBox1.Items.Add($"Shape Id: {shapeAnalyzer.Analyze(data.getShapeDescriptor())}");
 }
        public List <PoreAnalyzeData> FindShapes(Bitmap bitmap)
        {
            Bitmap      reversedbmp = ReverseBitmapColors(bitmap);
            BlobCounter blobCounter = new BlobCounter(reversedbmp);

            Blob[] blobs = blobCounter.GetObjects(reversedbmp, false);

            PoreAnalyzeData[] poreData = new PoreAnalyzeData[blobs.Length];
            OnStart?.Invoke(this, blobs.Length);

            Parallel.For(0, blobs.Length, index =>
            {
                var edgePoints  = blobCounter.GetBlobsEdgePoints(blobs[index]);
                poreData[index] = new PoreAnalyzeData(blobs[index], ReverseBitmapColors(blobs[index].Image.ToManagedImage()), edgePoints);
                OnProgress?.Invoke(this, new EventArgs());
            });

            return(poreData.ToList());
        }