Сценарий:
1) Программа собирается нарисовать строку (обычно один символ) на растровом изображении:
protected void DrawCharacter(string character, Font font)
{
if(string.IsNullOrEmpty(character))
character = ".";
FontFamily f = new FontFamily(FontName);
bitmap = new Bitmap((int)(font.Size * 2f), (int)font.Height);
Graphics g = Graphics.FromImage(bitmap);
g.Clear(Color.White);
g.DrawString(character, font, Brushes.Black, DrawPoint);
}
2) Используя следующий алгоритм, мы получаем положение всех черных пикселей:
public Int16[] GetColoredPixcels(Bitmap bmp, bool useGeneric)
{
List<short> pixels = new List<short>();
int x = 0, y = 0;
do
{
Color c = bmp.GetPixel(x, y);
if (c.R == 0 && c.G == 0 && c.B == 0)
pixels.Add((Int16)(x + (y + 1) * bmp.Width));
if (x == bmp.Width - 1)
{
x = 0;
y++;
}
else
x++;
} while (y < bmp.Height);
return pixels.ToArray();
}
Проблема возникает, когда входной символ представляет собой одну точку (.). Я не знаю, что происходит с растровым объектом при обработке функции bmp.GetPixel(x, y)
, потому что он не может найти положение точки! Выходной массив утверждает, что растровое изображение не имеет черной точки! Но когда входная строка (:), программа может правильно найти положение пикселей!
Любое предложение или руководство?
заранее спасибо ...