problem with filling pixels on bitmap

All your problems with Audio, Video and Images.

problem with filling pixels on bitmap

Postby _mc9_ » Wed Apr 14, 2010 5:57 pm

hello!

I'm new on anddev and i'm start programing on Android. I want to write somethings like Paint, but i have a big promblem with filling pixels on bitmap. I want to fill some space on bitmap using Bitmap.getPixel() and Bitmap.setPixel() methods.

There is my code:

Syntax: [ Download ] [ Hide ]
Using java Syntax Highlighting
  1.  
  2. public class Test extends View {
  3.  
  4.  
  5.  
  6.     private float firstX;
  7.  
  8.     private float firstY;
  9.  
  10.     private float currX;
  11.  
  12.     private float currY;
  13.  
  14.     private Path path;
  15.  
  16.     private Canvas c;
  17.  
  18.     private Paint p;
  19.  
  20.     private RectF buttonRect;
  21.  
  22.     private Paint buttonPaint;
  23.  
  24.     private boolean isFilling;
  25.  
  26.  
  27.  
  28.     public Test(Context c) {
  29.  
  30.         super(c);
  31.  
  32.         init();
  33.  
  34.  
  35.  
  36.     }
  37.  
  38.     public Test(Context c, AttributeSet as) {
  39.  
  40.         super(c, as);
  41.  
  42.         init();
  43.  
  44.     }
  45.  
  46.     public Test(Context c, AttributeSet as, int style) {
  47.  
  48.         super(c, as, style);
  49.  
  50.         init();
  51.  
  52.     }
  53.  
  54.    
  55.  
  56.     void init()
  57.  
  58.     {
  59.  
  60.         setFocusable(true);
  61.  
  62.         setFocusableInTouchMode(true);
  63.  
  64.  
  65.  
  66.         b = Bitmap.createBitmap(320, 480, Bitmap.Config.RGB_565);
  67.  
  68.  
  69.  
  70.         c = new Canvas(b);
  71.  
  72.         c.drawColor(Color.WHITE);
  73.  
  74.  
  75.  
  76.         p = new Paint();
  77.  
  78.         p.setColor(Color.BLACK);
  79.  
  80.         p.setStyle(Paint.Style.STROKE);
  81.  
  82.         p.setStrokeWidth(4);
  83.  
  84.  
  85.  
  86.         isFilling = false;
  87.  
  88.  
  89.  
  90.         buttonRect = new RectF(10, 10, 310, 40);
  91.  
  92.         buttonPaint = new Paint();
  93.  
  94.         buttonPaint.setColor(Color.GREEN);
  95.  
  96.     }
  97.  
  98.  
  99.  
  100.     private Bitmap b;
  101.  
  102.  
  103.  
  104.     @Override
  105.  
  106.     protected void onDraw(Canvas canvas) {
  107.  
  108.         Paint pp = new Paint();
  109.  
  110.         canvas.drawBitmap(b, 0, 0, pp);
  111.  
  112.         canvas.drawRect(buttonRect, buttonPaint);
  113.  
  114.     }
  115.  
  116.  
  117.  
  118.     @Override
  119.  
  120.     public boolean onTouchEvent(MotionEvent e) {
  121.  
  122.         if(!isFilling) {
  123.  
  124.             if(e.getAction()==MotionEvent.ACTION_DOWN) {
  125.  
  126.                 firstX = e.getX();
  127.  
  128.                 firstY = e.getY();
  129.  
  130.                 path = new Path();
  131.  
  132.                 path.moveTo(firstX, firstY);
  133.  
  134.             }
  135.  
  136.             else if(e.getAction()==MotionEvent.ACTION_MOVE) {
  137.  
  138.                 currX = e.getX();
  139.  
  140.                 currY = e.getY();
  141.  
  142.                 path.lineTo(currX, currY);
  143.  
  144.             }
  145.  
  146.             c.drawPath(path, p);
  147.  
  148.         } else {
  149.  
  150.             //========here is problem
  151.  
  152.             fill_seed((int)e.getX(), (int)e.getY(), Color.RED, Color.WHITE);
  153.  
  154.             //=======================
  155.  
  156.         }
  157.  
  158.  
  159.  
  160.         if( buttonRect.contains(e.getX(), e.getY()) ) {
  161.  
  162.             buttonPaint.setColor(Color.RED);
  163.  
  164.             if(e.getAction() == MotionEvent.ACTION_UP) {
  165.  
  166.                 isFilling = true;
  167.  
  168.             }
  169.  
  170.         } else {
  171.  
  172.             buttonPaint.setColor(Color.GREEN);
  173.  
  174.         }
  175.  
  176.  
  177.  
  178.         invalidate();
  179.  
  180.  
  181.  
  182.         return true;
  183.  
  184.     }
  185.  
  186.  
  187.  
  188.     void fill_seed(int x, int y, int colorNew,int colorOld)
  189.  
  190.     {
  191.  
  192.         {
  193.  
  194.             int ccc=b.getPixel(x, y);
  195.  
  196.             if (ccc==colorOld)
  197.  
  198.             {
  199.  
  200.                     b.setPixel(x, y, colorNew);
  201.  
  202.                     fill_seed (x, y-1, colorNew, colorOld);
  203.  
  204.                     fill_seed (x, y+1,colorNew, colorOld);
  205.  
  206.                     fill_seed (x-1, y, colorNew, colorOld);
  207.  
  208.                     fill_seed (x+1, y, colorNew, colorOld);
  209.  
  210.                     invalidate();
  211.  
  212.             }
  213.  
  214.  
  215.  
  216.         }
  217.  
  218.  
  219.  
  220.     }
  221.  
  222. }
  223.  
  224.  
Parsed in 0.042 seconds, using GeSHi 1.0.8.4


When I try use it i get :The application <name> has stopped unexpectedly. Please try again.

Has anybody any hint how to do this??

thanks! :]

Sorry for my poor english
_mc9_
Once Poster
Once Poster
 
Posts: 1
Joined: Wed Apr 14, 2010 4:21 pm

Top

Return to Multimedia Problems

Who is online

Users browsing this forum: No registered users and 27 guests