Android 位图随机变为透明(getpixel返回0)

Android 位图随机变为透明(getpixel返回0),android,transparency,bitmapimage,graphic,Android,Transparency,Bitmapimage,Graphic,我正在设计一个手指绘画应用程序,我已经实现了一个填充封闭区域的泛光填充算法。它工作得很好。但是,有时整个位图变为透明(getpixel返回0)。很难重现这个问题。我必须迅速填补许多领域的错误发生。发生这种情况时,整个屏幕变黑 我通过检索用户看到的最后一个图像(有效地执行“撤消”操作)解决了这个问题。我不知道为什么会这样。下面是洪水填充算法: protected Void doInBackground(Object... params) { Bitmap bmp = (B

我正在设计一个手指绘画应用程序,我已经实现了一个填充封闭区域的泛光填充算法。它工作得很好。但是,有时整个位图变为透明(getpixel返回0)。很难重现这个问题。我必须迅速填补许多领域的错误发生。发生这种情况时,整个屏幕变黑

我通过检索用户看到的最后一个图像(有效地执行“撤消”操作)解决了这个问题。我不知道为什么会这样。下面是洪水填充算法:

protected Void doInBackground(Object... params) {

            Bitmap bmp = (Bitmap) params[0];
            Point pt = (Point) params[1];
            int targetColor = (Integer) params[2];
            int replacementColor = (Integer) params[3];

            if (bmp.getPixel(pt.x, pt.y) == replacementColor)
                return null;

            Queue<Point> q = new LinkedList<Point>();
            q.add(pt);
            while (q.size() > 0) {
                Point n = q.poll();
                if (bmp.getPixel(n.x, n.y) != targetColor) {
                    continue;
                }

                Point w = n, e = new Point(n.x + 1, n.y);
                while ((w.x > 0) && (bmp.getPixel(w.x, w.y) == targetColor)) {

                    bmp.setPixel(w.x, w.y, replacementColor);

                    if ((w.y > 0)
                            && (bmp.getPixel(w.x, w.y - 1) == targetColor))

                        q.add(new Point(w.x, w.y - 1));
                    if ((w.y < bmp.getHeight() - 1)
                            && (bmp.getPixel(w.x, w.y + 1) == targetColor))
                        q.add(new Point(w.x, w.y + 1));
                    w.x--;
                }
                while ((e.x < bmp.getWidth() - 1)
                        && (bmp.getPixel(e.x, e.y) == targetColor)) {
                    bmp.setPixel(e.x, e.y, replacementColor);

                    if ((e.y > 0)
                            && (bmp.getPixel(e.x, e.y - 1) == targetColor))
                        q.add(new Point(e.x, e.y - 1));
                    if ((e.y < bmp.getHeight() - 1)
                            && (bmp.getPixel(e.x, e.y + 1) == targetColor))
                        q.add(new Point(e.x, e.y + 1));
                    e.x++;
                }
            }

            return null;

        }
protectedvoiddoinbackground(对象…参数){
位图bmp=(位图)参数[0];
点pt=(点)参数[1];
int targetColor=(整数)参数[2];
int replacementColor=(整数)参数[3];
if(bmp.getPixel(pt.x,pt.y)=replacementColor)
返回null;
队列q=新的LinkedList();
q、 添加(pt);
而(q.size()>0){
n点=q.poll();
如果(bmp.getPixel(n.x,n.y)!=targetColor){
持续
}
点w=n,e=新点(n.x+1,n.y);
而((w.x>0)和&(bmp.getPixel(w.x,w.y)==targetColor)){
bmp.setPixel(w.x,w.y,replacementColor);
如果((w.y>0)
&&(bmp.getPixel(w.x,w.y-1)=targetColor))
q、 增加(新点(w.x,w.y-1));
如果((w.y0)
&&(bmp.getPixel(e.x,e.y-1)=targetColor))
q、 增加(新点(e.x,e.y-1));
如果((e.y

我的变通方法做得很好,并显示一条消息,说明发生了错误并已恢复。但是其他人知道为什么会发生这种情况吗?

明白了-我必须在洪水填充算法处于活动状态时禁用所有内容-包括同时运行的其他洪水填充。否则,它们会同时在同一个位图上运行,结果会变得非常复杂