chromium截圖實現

聲明:本blog是我自己寫的,如果要轉載,請註明:come from blog of niba!

chromium最終顯示是在ContentView上,但通過硬件加速,渲染合成的網頁之前是在surfaceview上的。

所以,實現chromium的截圖可以通過SufraceView的截圖去實現。

  自己創建一個SurfaceView的子類,如下:

    class ChromiumSurfaceView extends SurfaceView {
        public ChromiumSurfaceView(Context context){
            super(context);
        }
        
        @Override
        public void onDraw(Canvas canvas) {
            // We only need to draw to software canvases, which are used for taking screenshots.
            if (canvas.isHardwareAccelerated()) return;
            Bitmap bitmap = Bitmap.createBitmap(getWidth(), getHeight(),
                    Bitmap.Config.ARGB_8888);
            if (nativeCompositeToBitmap(mNativeContentViewRenderView, bitmap)) {
                canvas.drawBitmap(bitmap, 0, 0, null);
            }
        }

        public void getBitmap(Canvas canvas){
            this.onDraw(canvas);
        }
    }

   通過方法getBitmap()間接去調用onDraw方法來實現將內容,進行繪製。


    public void getScreenShot() {
        Bitmap bitmap = Bitmap.createBitmap(getWidth(), getHeight(), Bitmap.Config.ARGB_8888);
        Canvas bitCanvas = new Canvas(bitmap);
        ((ChromiumSurfaceView)mSurfaceView).getBitmap(bitCanvas);
       
        try{
            File file = new File("/data/data/com.hisense.goblin/test.jpeg");
            FileOutputStream fos;
             fos = new FileOutputStream(file);
              bitmap.compress(Bitmap.CompressFormat.JPEG, 5, fos);
              fos.close();
        }catch(Exception e){
            e.printStackTrace();
        }
        
   }
 通過這個方法就可以實現截屏了。

 關於SurfaceView的其他信息,可以參考其他的blog,網上講的很多,這裏不再贅述   

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章