簡體   English   中英

如何在SD卡中保存畫布疊加位圖?

[英]How to save canvas overlay bitmap in sd-card?

我正在制作一個應用程序,其中在擦除覆蓋位圖的某些部分后,我要在畫布上作為覆蓋圖繪制位圖,我想將其保存到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;
}

但是我的要求是只保存疊加,謝謝。

當CompressFormat為JPEG時,由於JPEG格式不支持alpha透明性 ,因此它會顯示黑色背景,只需將CompressFormat更改為PNG甚至將圖像保存為png格式而不是jpeg。 檢查以下代碼:

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

在圖像的delcare路徑中,請使用.png擴展名。

目錄+“ /pics+"+System.currentTimeMillis()+".png”;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM