2013-02-15 6 views
1

Мне нужно нарисовать растровое изображение на холсте, но мне нужно удалить черные пиксели в прозрачные. Есть ли простой способ сделать это в Android? Bitmap.clearColor, похоже, ведет себя по-другому.Нарисуйте растровое изображение на холсте, заменяя черные пиксели на прозрачные

+0

принять ответ, если этот ответ поможет вам – Rohit

+0

Я в конечном итоге делаю setPixels для этого, опубликует код – traderp

ответ

1

Убедитесь, что наложенное растровое изображение, которое вы создали, на самом деле прозрачно. Создайте его с конфигурацией ARGB_8888 явно. http://developer.android.com/reference/android/graphics/Bitmap.Config.html

И вы можете перенести создание растрового изображения из метода reDraw и создать его только один раз.

1

он будет работает на на ощупь

import android.app.Activity; 
    import android.content.Context; 
    import android.graphics.Bitmap; 
    import android.graphics.Bitmap.Config; 
    import android.graphics.BlurMaskFilter.Blur; 
    import android.graphics.BitmapFactory; 
    import android.graphics.BlurMaskFilter; 
    import android.graphics.Canvas; 
    import android.graphics.Color; 
    import android.graphics.Paint; 
    import android.graphics.PorterDuff.Mode; 
    import android.graphics.PorterDuffXfermode; 
    import android.os.Bundle; 
    import android.view.MotionEvent; 
    import android.view.View; 

    public class StartActivity extends Activity { 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(new TouchView(this)); 


} 

class TouchView extends View{ 
    Bitmap bgr; 
    Bitmap overlayDefault; 
    Bitmap overlay; 
    Paint pTouch; 
    int X = -100; 
    int Y = -100; 
    Canvas c2; 

    public TouchView(Context context) { 
     super(context); 

     bgr = BitmapFactory.decodeResource(getResources(),R.drawable.bgr); 
     overlayDefault = BitmapFactory.decodeResource(getResources(),R.drawable.over); 
     overlay = BitmapFactory.decodeResource(getResources(),R.drawable.over).copy(Config.ARGB_8888, true); 
     c2 = new Canvas(overlay); 

     pTouch = new Paint(Paint.ANTI_ALIAS_FLAG);   
     pTouch.setXfermode(new PorterDuffXfermode(Mode.SRC_OUT)); 
     pTouch.setColor(Color.TRANSPARENT); 
     pTouch.setMaskFilter(new BlurMaskFilter(15, Blur.NORMAL)); 


    } 

    @Override 
    public boolean onTouchEvent(MotionEvent ev) { 

     switch (ev.getAction()) { 

      case MotionEvent.ACTION_DOWN: { 

       X = (int) ev.getX(); 
       Y = (int) ev.getY(); 
       invalidate(); 

       break; 
      } 

      case MotionEvent.ACTION_MOVE: { 

        X = (int) ev.getX(); 
        Y = (int) ev.getY(); 
        invalidate(); 
        break; 

      }   

      case MotionEvent.ACTION_UP: 

       break; 

     } 
     return true; 
    } 


    @Override 
    public void onDraw(Canvas canvas){ 
     super.onDraw(canvas); 

     //draw background 
     canvas.drawBitmap(bgr, 0, 0, null); 
     //copy the default overlay into temporary overlay and punch a hole in it       
     c2.drawBitmap(overlayDefault, 0, 0, null); //exclude this line to show all as you draw 
     c2.drawCircle(X, Y, 80, pTouch); 
     //draw the overlay over the background 
     canvas.drawBitmap(overlay, 0, 0, null); 

    } 


} 

} `

0

Проверьте это answer. Это не принято, но должно работать. Не забудьте включить аппаратное ускорение для просмотра, где вы используете это растровое изображение.

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