Пример #1
0
        public static Bitmap ApplyScaling(Color[,] pixels, int newWidth, int newHeight)
        {
            //Аргументы для процедуры вычисления координат крайних пикселей изображения
            int mostRight = 0;
            int mostDown  = 0;
            int mostLeft  = pixels.GetLength(0);
            int mostTop   = pixels.GetLength(1);

            //Поиск координат левого верхнего угла
            for (int i = 0; i < pixels.GetLength(0); i++)
            {
                for (int j = 0; j < pixels.GetLength(1); j++)
                {
                    if (ColorsComparer.IsEqual(pixels[i, j], Color.Black))
                    {
                        if (i <= mostLeft)
                        {
                            mostLeft = i;               //Отсеивание самого левого пикселя
                        }
                        if (j <= mostTop)
                        {
                            mostTop = j;              //Отсеивание самого верхнего пикселя
                        }
                        if (i >= mostRight)
                        {
                            mostRight = i;                //Отсеивание самого правого пикселя
                        }
                        if (j >= mostDown)
                        {
                            mostDown = j;               //Отсеивание самого нижнего пикселя
                        }
                    }
                }
            }

            var    describingRectangleWidth  = mostRight - mostLeft;
            var    describingRectangleHeight = mostDown - mostTop;
            Bitmap temp1 = new Bitmap(describingRectangleWidth, describingRectangleHeight);
            int    x = 0; int y = 0;

            for (int i = 0; i < describingRectangleWidth; i++)
            {
                for (int j = 0; j < describingRectangleHeight; j++)
                {
                    temp1.SetPixel(i, j, pixels[mostLeft + i, mostTop + j]);
                    y++;
                }
                x++;
                y = 0;
            }

            return(new Bitmap(temp1, newWidth, newHeight));
        }
Пример #2
0
        public double CalculatePixelMatchPercentage(Bitmap bitmap1, Bitmap bitmap2)
        {
            double summOfBlackPixels         = 0; //Количество всех черных пикселей
            double intersectingOfBlackPixels = 0; //Количество общих черных пикселей

            for (int i = 0; i < MainForm.WidthOfScaledImage; i++)
            {
                for (int j = 0; j < MainForm.HeightOfScaledImage; j++)
                {
                    if (ColorsComparer.IsEqual(bitmap1.GetPixel(i, j), Color.Black) ||
                        ColorsComparer.IsEqual(bitmap2.GetPixel(i, j), Color.Black))
                    {
                        summOfBlackPixels++;
                    }
                    if (ColorsComparer.IsEqual(bitmap1.GetPixel(i, j), Color.Black) &&
                        ColorsComparer.IsEqual(bitmap2.GetPixel(i, j), Color.Black))
                    {
                        intersectingOfBlackPixels++;
                    }
                }
            }

            return(Math.Round((intersectingOfBlackPixels * 100d) / summOfBlackPixels, 5));
        }