我正在构建一个Flash应用程序,可以从flickr中提取图像并删除白色背景
我正在使用阈值,我得到一个非常粗糙的结果
有没有办法获得更好,更顺畅的颜色键?
谢谢
photoNumber = Math.floor(Math.random() * (photos.length));
loader.load(new URLRequest(photos[photoNumber].path));
loader.contentLoaderInfo.addEventListener(Event.COMPLETE,draw);
trace ( "trying to load photo " + photoNumber );
function draw(e:Event) {
trace ("show photo " + photoNumber)
var W:int=e.target.content.width;
var H:int=e.target.content.height;
bitmapdata=new BitmapData(W,H);
bitmap=new Bitmap(bitmapdata);
bitmapdata.draw(e.target.content);
var threshold:uint = 0xF9F8F800;
var color:uint = 0x00000000;
var maskColor:uint = 0x00FF0000;
bitmapdata.threshold(bitmapdata,new Rectangle(0,0,W,H),new Point(0,0),">", threshold, color, maskColor, true);
bitmap.smoothing = true;
//bitmap.scaleX = bitmap.scaleY = 0.99; // <----
imgHolder.addChild(bitmap);
}
loader.load(new URLRequest(photos[photoNumber].path));
loader.contentLoaderInfo.addEventListener(Event.COMPLETE,draw);
trace ( "trying to load photo " + photoNumber );
function draw(e:Event) {
trace ("show photo " + photoNumber)
var W:int=e.target.content.width;
var H:int=e.target.content.height;
bitmapdata=new BitmapData(W,H);
bitmap=new Bitmap(bitmapdata);
bitmapdata.draw(e.target.content);
var threshold:uint = 0xF9F8F800;
var color:uint = 0x00000000;
var maskColor:uint = 0x00FF0000;
bitmapdata.threshold(bitmapdata,new Rectangle(0,0,W,H),new Point(0,0),">", threshold, color, maskColor, true);
bitmap.smoothing = true;
//bitmap.scaleX = bitmap.scaleY = 0.99; // <----
imgHolder.addChild(bitmap);
}
答案 0 :(得分:2)
您的面具和阈值不正确。我想你正试图做这样的事情:
var threshold:uint = 0x00F9F8F8;
var maskColor:uint = 0x00FFFFFF;
alpha是前两个十六进制字符。
答案 1 :(得分:0)
如果您只想删除白色像素,可以将图像与相同大小的白色位图进行比较,并更改匹配的像素(请参阅:http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/display/BitmapData.html#compare%28%29)。