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)); }
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)); }