你好朋友,
我创建绘画应用程序,我有问题.如果我绘制没有填充的矩形和/或其他类似绑定区域并更改背景颜色,则矩形填充区域也会更改意味着整个画布颜色将填充新的背景颜色.如何保持背景或填充未绑定的画布区域,这是图像
这是初始图像
更改背景颜色后获得此结果
但是如何变成这样的方式
解决方法final Point p1 = new Point(); p1.x=(int) x; //x co-ordinate where the user touches on the screen p1.y=(int) y; //y co-ordinate where the user touches on the screen new TheTask(yourbitmap,p1,sourcecolor,targetcolor).execute();// use asyntask for efficIEncy class TheTask extends AsyncTask<VoID,Integer,VoID> { Bitmap bmp; Point pt; int replacementcolor,targetcolor; ProgressDialog pd; public TheTask(Bitmap bm,Point p,int sc,int tc) {this.bmp=bm;this.pt=p;this.replacementcolor=tc;this.targetcolor=sc;pd= new ProgressDialog(context);pd.setMessage("Filling...."); } @OverrIDe protected voID onPreExecute() { pd.show(); } @OverrIDe protected voID onProgressUpdate(Integer... values) { } @OverrIDe protected VoID doInBackground(VoID... params) { FloodFill f= new FloodFill(); f.floodFill(bmp,pt,targetcolor,replacementcolor); return null; } @OverrIDe protected voID onPostExecute(VoID result) { pd.dismiss();invalIDate(); }
最后使用FloodFill算法填充封闭区域
public class FloodFill {public voID floodFill(Bitmap image,Point node,int targetcolor,int replacementcolor) { int wIDth = image.getWIDth(); int height = image.getHeight(); int target = targetcolor; int replacement = replacementcolor; if (target != replacement) { Queue<Point> queue = new linkedList<Point>(); do { int x = node.x; int y = node.y; while (x > 0 && image.getPixel(x - 1,y) == target) { x--; } boolean spanUp = false; boolean spanDown = false; while (x < wIDth && image.getPixel(x,y) == target) { image.setPixel(x,y,replacement); if (!spanUp && y > 0 && image.getPixel(x,y - 1) == target) { queue.add(new Point(x,y - 1)); spanUp = true; } else if (spanUp && y > 0 && image.getPixel(x,y - 1) != target) { spanUp = false; } if (!spanDown && y < height - 1 && image.getPixel(x,y + 1) == target) { queue.add(new Point(x,y + 1)); spanDown = true; } else if (spanDown && y < height - 1 && image.getPixel(x,y + 1) != target) { spanDown = false; } x++; } } while ((node = queue.poll()) != null); }}}总结
以上是内存溢出为你收集整理的android – 填充完整的画布,但保持绑定的填充区域,因为它像圆形,矩形全部内容,希望文章能够帮你解决android – 填充完整的画布,但保持绑定的填充区域,因为它像圆形,矩形所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)