2011-02-14 8 views
10

は、私が試した:Android:ルートデバイスでフレームバッファ(スクリーンショット)を取得するにはどうすればよいですか?

process = Runtime.getRuntime().exec("su -c cat /dev/graphics/fb0 > /sdcard/frame.raw"); 
process.waitFor(); 

が、それは動作しません。私のデバイスは根付いています。

私はそれが根付いたアクセスを必要としているが、フレームバッファを取得するための実際のコードはないという多くの答えを見ています。

私もglReadPixels()を試しましたが運はありませんでした。

public void TakeScreen() { 

     DisplayMetrics dm = new DisplayMetrics(); 
     getWindowManager().getDefaultDisplay().getMetrics(dm); 
     int width = dm.widthPixels; 
     int height = dm.heightPixels; 

     int screenshotSize = width * height; 
     ByteBuffer bb = ByteBuffer.allocateDirect(screenshotSize * 4); 
     bb.order(ByteOrder.nativeOrder()); 
     gl.glReadPixels(0, 0, width, height, GL10.GL_RGBA, 
       GL10.GL_UNSIGNED_BYTE, bb); 
     int pixelsBuffer[] = new int[screenshotSize]; 
     bb.asIntBuffer().get(pixelsBuffer); 
     bb = null; 
     Bitmap bitmap = Bitmap.createBitmap(width, height, 
       Bitmap.Config.RGB_565); 
     bitmap.setPixels(pixelsBuffer, screenshotSize - width, -width, 0, 0, 
       width, height); 
     pixelsBuffer = null; 

     short sBuffer[] = new short[screenshotSize]; 
     ShortBuffer sb = ShortBuffer.wrap(sBuffer); 
     bitmap.copyPixelsToBuffer(sb); 

     for (int i = 0; i < screenshotSize; ++i) { 
      short v = sBuffer[i]; 
      sBuffer[i] = (short) (((v & 0x1f) << 11) | (v & 0x7e0) | ((v & 0xf800) >> 11)); 
     } 
     sb.rewind(); 
     bitmap.copyPixelsFromBuffer(sb); 
     saveBitmap(bitmap, "/screenshots", "capturedImage"); 
    } 
+0

これは最後にできましたか?もしそうなら、あなたはどのように共有することができますか? – zacsek

+0

http://stackoverflow.com/questions/17304611/android-read-fb0-always-give-me-blackscreen/17331970#17331970 – fadden

答えて

0

答えは装置自体がそれを処理する方法を複製することにある。

FB =オープン( "/ devの/グラフィック/ FB0"、O_RDONLY)。

チェックthis

0

あなたの問題は、この記号であるように私には思える:>execを使用して出力をリダイレクトすることはできません。あなたがする必要があるのは、プロセスの出力ストリーム(あなたのための入力ストリームです)を取得してファイルに保存することです。

process = Runtime.getRuntime().exec("su -c cat /dev/graphics/fb0"); 
InputStream is = process.getInputStream(); 
... 
0

これは答えではありません。私が働いている会社はこれまでにこれをしていましたが、彼らが何をしているのか分かりませんが、バッファを取得できないということは、デバイスのハードウェアアーキテクチャに依存します。

関連する問題