android – 填充完整的画布,但保持绑定的填充区域,因为它像圆形,矩形

android – 填充完整的画布,但保持绑定的填充区域,因为它像圆形,矩形,第1张

概述可能重复 你好朋友, 我创建绘画应用程序,我有问题.如果我绘制没有填充矩形和/或其他类似绑定区域并更改背景颜色,则矩形填充区域也会更改意味着整个画布颜色将填充新的背景颜色.如何保持背景或填充未绑定的画布区域,这是图像 这是初始图像 更改背景颜色后获得此结果 但是如何变成这样的方式 final Point p1 = new Point(); p1.x=(int) x 可能重复

你好朋友,

我创建绘画应用程序,我有问题.如果我绘制没有填充的矩形和/或其他类似绑定区域并更改背景颜色,则矩形填充区域也会更改意味着整个画布颜色将填充新的背景颜色.如何保持背景或填充未绑定的画布区域,这是图像

这是初始图像

更改背景颜色后获得此结果

但是如何变成这样的方式

解决方法
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 – 填充完整的画布,但保持绑定的填充区域,因为它像圆形,矩形所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1127008.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-30
下一篇 2022-05-30

发表评论

登录后才能评论

评论列表(0条)

保存