2

画像をこすりたいです。実際には、前景と背景の2つの画像があります。前景の画像をこすると、背景の画像でその方法を説明する必要があります。ここでたくさん見つけましたが、まだ解決策が得られません。誰かお願いします。私のこの問題のために私を助けてください。私はこれを試しました:

public class MainActivity extends Activity {

ImageView img;

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // setContentView(R.layout.activity_main);
    // img = (ImageView) findViewById(R.id.img);
    //
    // new Panel(this);
    setContentView(new Panel(this));

}

class Panel extends View {

    private Bitmap mBitmap;
    private Canvas mCanvas;
    private Path mPath;
    private Paint mPaint;
    Bitmap bitmap;
    Canvas pcanvas;
    int x = 0;
    int y = 0;
    int r = 0;

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

        Log.v("Panel", ">>>>>>");

        setFocusable(true);
        setBackgroundColor(Color.MAGENTA);

        // setting paint
        mPaint = new Paint();
        mPaint.setAlpha(1);
        mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN));
        mPaint.setAntiAlias(true);

        // getting image from resources
        Resources r = this.getContext().getResources();

        Bitmap bm = BitmapFactory.decodeResource(getResources(),
                R.drawable.verse);

        // converting image bitmap into mutable bitmap

        // bitmap = Bitmap.createBitmap(295, 260, Config.ARGB_8888);
        bitmap = Bitmap.createBitmap(185, 120, Config.ARGB_8888);
        pcanvas = new Canvas();
        pcanvas.setBitmap(bitmap); // drawXY will result on that Bitmap
        pcanvas.drawBitmap(bm, 0, 0, null);

    }

    @Override
    protected void onDraw(Canvas canvas) {

        // draw a circle that is erasing bitmap
        // pcanvas.drawCircle(x, y, r, mPaint);
        pcanvas.drawColor(color.transparent);
        canvas.drawBitmap(bitmap, 0, 0, null);

        super.onDraw(canvas);

    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {

        // set paramete to draw circle on touch event
        x = (int) event.getX();
        y = (int) event.getY();

        r = 20;
        // Atlast invalidate canvas
        invalidate();
        return true;
    }

}
}
4

1 に答える 1

0

Xfermodes / Porterduffを試してみてください。おそらくこのスレッドが役立つかもしれません: Android bitmap mask color, remove color

使用できる色をハードセットするには

int[] pix=new int[bitmap.getWidth()*bitmap.getHeight()];
bitmap.getPixels(pix, 0, 0, bitmap.getWidth(), bitmap.getHeight);

// do some processing here
// possible set color of some pixels to Color.TRANSPARENT

bitmap.setPixels(pix, 0, bitmap.getWidth(), 0, 0, bitmap.getWidth(), bitmap.getHeight());
于 2013-01-24T14:45:27.027 に答える