나는 카메라 입력에서 캡처 한 비트 맵을 벡터로 변환하여 벡터 점을 나중에 사용할 수 있도록 배열로 변환하려고 시도해 왔습니다.비트 맵을 as3으로 벡터로 변환
그러나 Flash 내에서 이러한 기능을 찾을 수 없으므로 Corey O'Neil으로 만든 'Vectorization Package'를 사용하려고했습니다. 이것은 작동하지만 내 비트 맵에서 흰색 배경을 제거하는 데 실패합니다 (나는 그 위에 선이있는 그림을 캡처하고 있습니다). 수동으로이 작업을 수행하고 배경을 투명하게 만드는 경우에도 결과가 나타나지 않습니다.
public class DocumentRich extends MovieClip{
public var initBox2D:Main;
var cam:Camera = Camera.getCamera();
var vid:Video = new Video(420, 300);
var myVector:Vectorize;
public function DocumentRich()
{
if(stage){
initBox2D = new Main();
addChild(initBox2D);
//addChild(new movieMonitor());
}
addEventListener(MouseEvent.CLICK, clickHandler, false, 0, true);
StartAnim();
}
function StartAnim():void
{
//SET UP WORLD
initBox2D.isDebugMode(false);
initBox2D.mouseDragEnabled(true);
Main.world.SetGravity(new b2Vec2(0,0));
cam.setQuality(0, 100);
cam.setMode(420, 300, 30, true);
trace(cam.height);
vid.attachCamera(cam);
addChild(vid);
addChild(go);
}
function clickHandler(m:MouseEvent){
trace(m.target.name);
switch(m.target.name){
case 'go':
goButtonFun();
break;
}
}
function goButtonFun():void{
var screenShot:BitmapData = new BitmapData(cam.width, cam.height);
var screenShot_image:Bitmap=new Bitmap(screenShot);
screenShot.draw(vid) ;
ReduceColors.reduceColors(screenShot, 0, true, false);
screenShot.colorTransform(new Rectangle(0, 0, screenShot.width, screenShot.height), new ColorTransform(2,2,2,1));
///// --------- MAY NOT NEED THIS ----------- ////////////
for(var i:int = 0; i<screenShot.width; i++)
{
for(var j:int = 0; j<screenShot.height; j++)
{
if(screenShot.getPixel(i,j) == 0xffffff)
{
var transparent:uint = 0x00000000;
screenShot.setPixel32(i, j, transparent);
}
}
}
myVector = new Vectorize(screenShot_image, 23, 2, 1, 3, 0xFFFFFF);
myVector.addEventListener(Vectorize.INIT, traceStatus);
myVector.addEventListener(Vectorize.DESPECKLE_START, traceStatus);
myVector.addEventListener(Vectorize.DESPECKLE_COMPLETE, traceStatus);
myVector.addEventListener(Vectorize.GROUPING_START, traceStatus);
myVector.addEventListener(Vectorize.GROUPING_COMPLETE, traceStatus);
myVector.addEventListener(Vectorize.EDGING_START, traceStatus);
myVector.addEventListener(Vectorize.EDGING_COMPLETE, traceStatus);
myVector.addEventListener(Vectorize.DESPECKLE_PROGRESS, traceProgress);
myVector.addEventListener(Vectorize.GROUPING_PROGRESS, traceProgress);
myVector.addEventListener(Vectorize.EDGING_PROGRESS, traceProgress);
myVector.addEventListener(Vectorize.COMPLETE, showVector);
myVector.vectorize();
//addChild(screenShot_image);
addChild(go);
removeChild(vid);
cam = null;
vid.attachCamera(null);
vid = null;
}
function traceStatus(event:Event):void
{
trace(event.type);
}
function traceProgress(event:Event):void
{
var progress:int = event.target.percentDone * 100;
trace(event.type + ": " + progress + "%");
}
function showVector(event:Event):void
{
trace(event.type);
addChild(myVector);
}
}
어떤 제안 : 여기
내 코드?감사합니다.
가 UPDATE : 혼란을 죄송합니다, 기본적으로 내가 투명 비트 맵을 추적 할 수있는 방법을 좋아하고있는 모양의 점의 배열을 얻을 것 비트 맵 말했다. 픽셀 데이터의 배열이 너무 크면 ... 크기에 관계없이 사각형에 대해 4 포인트를 원합니다 ...
당신은 한 줄로 된 종이의 그림을 벡터화하고 있지만, 그 색 값은 #ffffff 일 가능성이 없습니다. 라이브러리에 허용 오차 설정이 있습니까? – prototypical
나는이 라인을 사용하여 이미지를 흑백으로 변환한다 : 'ReduceColors.reduceColors (screenShot, 0, true, false); screenShot.colorTransform (new Rectangle (0, 0, screenShot.width, screenShot.height), new ColorTransform (2,2,2,1)); –
이 두 줄로 인해 이미지가 검정색과 흰색 ? 시각적으로뿐만 아니라 비트 맵 데이터의 색상 값을 확인 했습니까? – prototypical