2013-11-07 2 views
0

В моем приложении я использовал заливку заливки для заполнения части растрового изображения цветом. Все работало нормально, но я создаю растровое изображение с createcaledbitmap, оно не работает. Пожалуйста, предложите мне.floodfill android не работает, когда растровое изображение подходит для экрана с созданием масштабированного растрового изображения

мой код выглядит следующим образом.

У меня была заливка заливки в асинхронную задачу.

@Override 
public boolean onTouchEvent(MotionEvent event) { 
    float x = event.getX(); 
    float y = event.getY(); 
    switch (event.getAction()) { 
    case MotionEvent.ACTION_DOWN: 

     p1.x = (int) x; 
     p1.y = (int) y; 
     final int sourceColor = resultBmp.getPixel((int) x, (int) y); 
     final int targetColor = paint.getColor(); 
     new TheTask(resultBmp, p1, sourceColor, targetColor).execute(); 
     invalidate(); 
    } 
    return true; 
} 

public void clear() { 
    path.reset(); 
    invalidate(); 
} 

public int getCurrentPaintColor() { 
    return paint.getColor(); 
} 

class TheTask extends AsyncTask<Void, Integer, Void> { 

    Bitmap bmp; 
    Point pt; 
    int replacementColor, targetColor; 

    public TheTask(Bitmap bm, Point p, int sc, int tc) { 
     this.bmp = bm; 
     this.pt = p; 
     this.replacementColor = tc; 
     this.targetColor = sc; 
     pd.setMessage("Filling...."); 
     pd.show(); 
    } 

    @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(); 
    } 
} 
} 

моей заливка класс

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); 
    } 
} 
} 

мой OnDraw метод

@Override 
protected void onDraw(Canvas canvas) { 
    this.canvas = canvas; 

    int w = mBitmap.getWidth(); 
    int h = mBitmap.getHeight(); 

    resultBmp = null; 



    int widthofBitMap = screenWidth; 
    int heightofBitMap = widthofBitMap * h/w; 

    resultBmp = Bitmap.createScaledBitmap(mBitmap, widthofBitMap, heightofBitMap, true); 

    canvas.drawBitmap(resultBmp, 0, 0, paint); 
    //if i create only bitmap without scaling it works fine. 
// for ex 
//canvas.drawBitmap(mBitmap,0,0,paint); works fine. 

} 

пожалуйста, предложите мне

+0

Пожалуйста, ознакомьтесь с этим вопросом, http://stackoverflow.com/questions/20697189/fill-color-on-bitmap-in-android – Hasmukh

+1

Ссылка, которую вы дали, полностью отличается от наводнения. Наполнение наполнителя работает как красящая бутылка в окнах. См. Это, чтобы узнать больше о заливе залива. Http://en.wikipedia.org/wiki/Flood_fill –

ответ

0

Метод заливки принимает каждый пиксель и изменение его цвета в потоке, Поэтому вместо увеличения размера с помощью создания масштабированного растрового изображения, я использую отдельные растровые изображения для разных scree n размеров. Это громоздкий процесс, но по моему исследованию нет другого пути.

Смежные вопросы

 Смежные вопросы