Я пытаюсь извлечь контурный путь из заданного растрового изображения, я создаю быстрый алгоритм (для меня) на as3, и это:
//@v source bitmap's vector data
//@x x to starting extraction
//@y y to stating extraction
//@w extraction width
//@h extraction height
//@mw source bitmap width
//@mh source bitmap height
private function extractRects(v:Vector.<uint>, x:int, y:int,
w:int, h:int, mw:int, mh:int):Array
{
var ary:Array = [], yy:int=y, vStart:int, _xx:int, xx:int;
var lcold:int = 0, lc:int;
//first line to last line
while(yy < h)
{
//first index of current vector
vStart = yy * mw + x;
xx = x;
lc = 0;
//first vector to last on current scan
while(xx < w)
{
/*
if current vector value (color) is
empty (transparent) then
check next
*/
while(xx < w && !v[vStart])
{
vStart++;
xx++;
}
//it is not empty so copy first index
_xx = xx;
//check till value is not empty
while(xx < w && v[vStart])
{
xx++;
vStart++;
}
//create rectangle
var rr:Rectangle = new Rectangle(_xx, yy, (xx-_xx), 1);
//if previous line has the same rectangle index
if(lc < lcold)
{
var oldrr:Rectangle = ary[ary.length - lcold];
//if previous neighbour rect on top
//has same horizontal position then
//resize its height
if(oldrr.left == rr.left && oldrr.width == rr.width)
oldrr.height++;
else
ary.push(rr);
}
else
ary.push(rr);
lc++;
xx++;
}
lcold = lc;
yy++;
}
return ary;
}
по методу, описанному выше, я извлекаю область и создаю фигуру, рисуя ректы.
рисование не является хорошим решением для меня из-за негладкого вида.
чтобы иметь более плавный обзор, я должен использовать линии или кривые, но вычисление соседней точки - это действительно большая головная боль для меня с сонными глазами прямо сейчас.
Не могли бы вы порекомендовать мне какое-нибудь известное или лучшее решение?
as3, c ++, c #, vb.net, vb6, delphi, java или аналогичные языки подойдут для ответов.
спасибо за ваше продвижение ..
РЕДАКТИРОВАТЬ ДЛЯ ОЧИСТКИ
Я пытаюсь извлечь координаты x, y непрозрачных пикселей из растрового изображения для рисования по другим данным пути. (32 бит ARGB) (создание формы)
для рисования я мог бы использовать операции lineTo, curveTo, moveTo
moveTo(x, y)
lineTo(x, y)
curveTo(cx, cy, ax, ay)
в своем коде я подумал, что могу извлечь прямоугольники из текущих непрозрачных блоков, и я могу использовать те же фрагменты с операциями moveTo и lineTo для других графических методов
проблема в том, что использование этого метода дает негладкий вид на ребра, которые являются соседними по горизонтали и вертикали
Итак, решением является создание точечной карты по краям, определение окрестности точки, использование операции lineTo (поскольку она генерирует сглаженные линии) между соседними точками в строках, или вычисление расположения точек в ближайшей области окружности и использование метода curveTo. ..
мой вопрос: не могли бы вы порекомендовать мне некоторые алгоритмы или методы для извлечения работы.
извините за мой английский
спасибо