Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Здравствуйте, господа! Вообщем, требуется написать какой-то более-менее шустрый алгоритм для заливки пустых пространств в букве черным цветом. Что-то я не догоняю как это реализовать. Что именно требуется, смотрите на видео. Там присутствуют "дыры" в буквах, их надобно залить =)
Вот кое-какой код из алгоритма восстановления целостности букв.
Вот кое-какой код из алгоритма восстановления целостности букв.
Код:
public static List<Point> FindSpacesH(Bitmap bitmap, int threshold)
{
List<Point> points = new List<Point>();
for (int y = 0; y < bitmap.Height; y++)
{
int startPoint = -1;
for (int x = 0; x < bitmap.Width; x++)
{
if (startPoint == -1) { if (GetGrayScale(bitmap.GetPixel(x, y)) == 0) startPoint = x; }
else
{
if (GetGrayScale(bitmap.GetPixel(x, y)) == 0)
{
if (x - startPoint <= threshold) { for (int i = startPoint + 1; i < x; i++) points.Add(new Point(i, y)); }
startPoint = -1;
}
}
}
}
return points;
}
public static List<Point> FindSpacesV(Bitmap bitmap, int threshold)
{
List<Point> points = new List<Point>();
for (int x = 0; x < bitmap.Width; x++)
{
int startPoint = -1;
for (int y = 0; y < bitmap.Height; y++)
{
if (startPoint == -1) { if (GetGrayScale(bitmap.GetPixel(x, y)) == 0) startPoint = y; }
else
{
if (GetGrayScale(bitmap.GetPixel(x, y)) == 0)
{
if (y - startPoint <= threshold) { for (int i = startPoint + 1; i < y; i++) points.Add(new Point(x, i)); }
startPoint = -1;
}
}
}
}
return points;
}
public static Bitmap HorizontalFiller(Bitmap bitmap, int threshold, int passes = 1)
{
Bitmap bmp = (Bitmap)bitmap.Clone();
for (int i = 0; i < passes; i++)
{
List<Point> points = FindSpacesH(bmp, threshold);
bmp = FillPixels(bmp, points, Color.Black);
}
return bmp;
}
public static Bitmap VerticalFiller(Bitmap bitmap, int threshold, int passes = 1)
{
Bitmap bmp = (Bitmap)bitmap.Clone();
for (int i = 0; i < passes; i++)
{
List<Point> points = FindSpacesV(bmp, threshold);
bmp = FillPixels(bmp, points, Color.Black);
}
return bmp;
}
public static Bitmap FillPixels(Bitmap bitmap, List<Point> points, Color color)
{
Bitmap bmp = (Bitmap)bitmap.Clone();
foreach (Point point in points) bmp.SetPixel(point.X, point.Y, color);
return bmp;
}