wordEnd - wordBegin + 1,
str.Height),
System.Drawing.Imaging.PixelFormat.Format24bppRgb)
)
);
//обнуляем счетчики
//и флаги
whiteWidth = 0;
wordFound = false;
wordBegin = 0;
wordEnd = 0;
}
}
}
return words;
}
/// <summary>
/// Получить битмапы всех слов в тексте
/// </summary>
/// <param name="text">битмап с текстом</param>
/// <returns>коллекция всех слов втексте</returns>
public static List<Bitmap>GetWords(Bitmap text)
{
List<Bitmap> strs = GetStrings(text);
List<Bitmap> words = newList<Bitmap>();
foreach (Bitmap str in strs)
{
foreach (Bitmap word inGetStringWords(str))
{
words.Add(word);
}
}
return words;
}
/// <summary>
/// Обрезка белых полей вокруг изображения на битмапе
/// </summary>
/// <paramname="bmp"></param>
/// <returns></returns>
public static Bitmap TrimBitmap(Bitmap bmp)
{
int left = 0;
int right = 0;
int top = 0;
int bottom = 0;
bool go = true;
//проход сверху
for (int j = 0; (j < bmp.Height)&& go; j++)
{
for (int i = 0; (i < bmp.Width)&& go; i++)
{
if (bmp.GetPixel(i, j) !=Color.FromArgb(255, 255, 255))
{
go = false;
top = j;
}
}
}
go = true;
//проход снизу
for (int j = bmp.Height - 1; (j >= 0)&& go; j--)
{
for (int i = 0; (i < bmp.Width)&& go; i++)
{
if (bmp.GetPixel(i, j) !=Color.FromArgb(255, 255, 255))
{
go = false;
bottom = j;
}
}
}
go = true;
//проход слева
for (int i = 0; (i < bmp.Width)&& go; i++)
{
for (int j = 0; (j < bmp.Height)&& go; j++)
{
if (bmp.GetPixel(i, j) !=Color.FromArgb(255, 255, 255))
{
go = false;
left = i;
}
}
}
go = true;
//проход спарва
for (int i = bmp.Width - 1; (i >= 0)&& go; i--)
{
for (int j = 0; (j < bmp.Height)&& go; j++)
{
if (bmp.GetPixel(i, j) !=Color.FromArgb(255, 255, 255))
{
go = false;
right = i;
}
}
}
return bmp.Clone(new Rectangle(left, top,right - left + 1, bottom - top + 1),System.Drawing.Imaging.PixelFormat.Format24bppRgb);
}
}
}
Лист1 – Схема приложения
Функциональнаясхема приложения
Лист2 – Диаграмма классов
Лист3 – Результаты работы программы.
Лист4 – Схема алгоритма сегментации текста.