簡體   English   中英

如何在相機捕獲的圖像上疊加圖像或視圖

[英]How to overlay an image or view on top of a camera captured image

我正在做的是將相機上的圖像繪制到canvas ,然后將包含圖像的view轉換為bitmap並將其繪制在畫布上。 然后將最終的bitmap保存到外部存儲器。

問題是canvas似乎是將自身大小調整為預覽窗口大小,而不是保存的圖像大小。

以下是我的活動類中的部分,它將捕獲的視圖合並到攝像機圖像的頂部:

        Bitmap myImage = BitmapFactory.decodeByteArray(imageData, 0,
                imageData.length, options);
        Bitmap mutableBitmap = myImage.copy(Bitmap.Config.ARGB_8888, true);

        Paint paint = new Paint();
        Canvas canvas = new Canvas(mutableBitmap);

        view.setDrawingCacheEnabled(true);
        viewCapture = Bitmap.createBitmap(view.getDrawingCache());
        view.setDrawingCacheEnabled(false);
        canvas.drawBitmap(viewCapture, 0, 0, paint);

        fileOutputStream = new FileOutputStream(dir + "/" + imgName + ".jpg");

        BufferedOutputStream bos = new BufferedOutputStream(fileOutputStream);
        mutableBitmap.compress(CompressFormat.JPEG, quality, bos);

這會將位圖保存在捕獲的圖像之上,但由於尺寸不同,它會偏移到左上角。

我通過在surfaceChanged中執行以下操作來設置不同的大小

  Camera.Parameters p = mCamera.getParameters();
  Camera.Size myBestPreviewSize = getBestPreviewSize(w, h, p);
  p.setPreviewSize(myBestPreviewSize.width, myBestPreviewSize.height);
  Camera.Size myBestPictureSize = getBestPictureSize(w, h, p);
  p.setPictureSize(myBestPictureSize.width, myBestPictureSize.height);

顯然,通過這樣做,我獲得了預覽窗口的最佳分辨率,以及捕獲圖像的最佳分辨率。 我認為這個問題是由兩個不同的決議引起的,但弄清楚為什么我會陷入困境。

希望以下圖片能更好地描述問題:

此圖像顯示預覽窗口。 正如您所看到的,Android處於圖像的中間位置。 在此輸入圖像描述

我捕獲上面的圖像並保存。 我去看它,這就是它的樣子: 在此輸入圖像描述

請注意,Android不再位於中間位置,位於左上角。

作為另一個測試,我將android部分移出屏幕,如下一個相機預覽所示 在此輸入圖像描述

我完全按照上面所示捕獲圖像,並且在查看它時,android完全切斷了它在預覽窗口中的狀態,但是當它應該是全屏時它再次位於左上角 在此輸入圖像描述

從相機中檢索到的位圖將是巨大的(2000 + px寬)。 繪制圖像的SurfaceView僅與設備分辨率(~1000px寬)一樣大。 當你將它繪制到另一個上時,你需要縮放它,或者它最終應該是它應該的大小的1/2(如截圖中所示)。 以下是我修改代碼的方法。

view.setDrawingCacheEnabled(true);
viewCapture = Bitmap.createBitmap(view.getDrawingCache());
view.setDrawingCacheEnabled(false);
//Source Rect sized to the surface view.
Rect src = new Rect(0, 0, viewCapture.getWidth(), viewCapture.getHeight());
//Destination RectF sized to the camera picture
RectF dst = new RectF(0, 0, myImage.getWidth(), myImage.getHeight());
canvas.drawBitmap(viewCapture, src, dst, paint);

我知道你在設置相機參數和尺寸方面做了一些努力,但要么它不起作用,要么你需要采取不同的方法。 不過,我認為這應該有用。 你的第二個屏幕截圖,其中兩個圖像中的Android人物剪輯表明它只是一個簡單的縮放問題。

希望有所幫助!

暫無
暫無

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

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