Android 如何在sd卡中保存画布覆盖位图?

Android 如何在sd卡中保存画布覆盖位图?,android,Android,我正在制作一个应用程序,其中我正在画布上绘制一个位图作为覆盖,在擦除覆盖位图的某些部分后,我想将其保存到sd卡中,但保存时它包含黑色 类用户界面附加屏幕 我的代码如下:- public EraserView(Context context) { super(context); setFocusable(true); setBackgroundResource(R.drawable.back); // setting paint mPaint = new P

我正在制作一个应用程序,其中我正在画布上绘制一个位图作为覆盖,在擦除覆盖位图的某些部分后,我想将其保存到sd卡中,但保存时它包含黑色 类用户界面附加屏幕

我的代码如下:-

public EraserView(Context context) {
    super(context);
    setFocusable(true);
    setBackgroundResource(R.drawable.back);
    // setting paint
    mPaint = new Paint();
    mPaint.setAlpha(0);
    mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN));
    mPaint.setColor(Color.TRANSPARENT);
    mPaint.setAntiAlias(true);
    Resources r = this.getContext().getResources();
    Bitmap bm = BitmapFactory.decodeResource(getResources(),
            R.drawable.image2);
    bitmap = bm.createBitmap(295, 260, 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) {
    pcanvas.drawCircle(x, y, r, mPaint);
    canvas.drawBitmap(bitmap, 0, 0, null);
    setBitmap(bitmap);
    super.onDraw(canvas);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
switch(event.getAction())
    {
    case MotionEvent.ACTION_DOWN:
        x = (int) event.getX();
        y = (int) event.getY();
        r = 2;
       invalidate();
        break;
    case MotionEvent.ACTION_UP:
        x = (int) event.getX();
        y = (int) event.getY();
        r = 20;
        invalidate();
        break;
    case MotionEvent.ACTION_MOVE:
        x = (int) event.getX();
        y = (int) event.getY();
        r =2;
        invalidate();
        break;
    case MotionEvent.ACTION_POINTER_UP:
        x = (int) event.getX();
        y = (int) event.getY();
        r = 2;
        // Atlast invalidate canvas
        invalidate();
        break;
    }
    return true;
}

public void setBitmap(Bitmap bitmap) {
    this.bitmap = bitmap;
}

public Bitmap getBitmap() {
    return bitmap;
}
但我的要求是只保存覆盖,谢谢。当CompressFormat为JPEG时,它会显示黑色背景,因为只需将CompressFormat更改为PNG,甚至可以将图像保存为PNG格式而不是JPEG。检查以下代码:

ByteArrayOutputStream objbytes = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 100, objbytes);
在删除图像的路径时,请使用.png扩展名

目录+“/pics+”+System.currentTimeMillis()+“.png”


也许你们并没有得到问题,我需要的是如何保存只覆盖位图,目前位图保存正确,但与黑色背景,所以请帮助有关…你们想保存黑色部分。还是狗?你能澄清一下你的照片中的前景和背景是什么吗?@Rvdk我只想保存狗的部分