【问题标题】:How to save canvas overlay bitmap in sd-card?如何将画布覆盖位图保存在 SD 卡中?
【发布时间】:2013-07-01 05:37:51
【问题描述】:

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

我的代码如下:-

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

但我的要求只是提前保存叠加层。

【问题讨论】:

    标签: android


    【解决方案1】:

    当 CompressFormat 为 JPEG 时,它会显示黑色背景,因为 JPEG format does not support alpha transparency,只需将 CompressFormat 更改为 PNG,甚至将图像保存为 png 格式 而不是 jpeg。检查以下代码:

    ByteArrayOutputStream objbytes = new ByteArrayOutputStream();
    bitmap.compress(Bitmap.CompressFormat.PNG, 100, objbytes);
    

    在删除图片路径时,使用 .png 扩展名。

    目录 + "/pics+"+System.currentTimeMillis()+".png";

    【讨论】:

    • 也许你没有得到问题,我需要的是如何只保存覆盖位图,目前位图正在正确保存但黑色背景所以请帮忙..
    • 是否要保存黑色部分。还是狗?你能澄清一下你照片中的前景和背景是什么吗?
    • @Rvdk 我只想保存狗部分
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-21
    • 1970-01-01
    • 2012-08-04
    • 2014-08-17
    • 2020-07-01
    • 1970-01-01
    • 2014-09-16
    相关资源
    最近更新 更多