2017-01-05 4 views
0

私のターミナルコマンドでadb shell screencap -p | sed 's/\r$//' > screen.pngそれは仕事です、私のアンドロイド画面を保存します。Rustにstdout save imageを使用するには?

私はadb pullを使用することができますが、私はstdoutを使用してRustの画像を保存する方法を知りたいと思いますか?だから、私はこのコードを試して、購入は画像を開くことができません。そこエンコーディングの問題かもしれないが、私は、画像データは、Unicode文字列、バイナリではありません彼らに

let output = Command::new("adb") 
      .arg("shell") 
      .arg("screencap -p") 
      .output() 
      .expect("failed to execute process"); 

    let byte_string = String::from_utf8_lossy(&output.stdout).replace("\r\n","\n"); 


    let byte_string = String::from_utf8_lossy(&output.stdout); 
    let mut buffer = try!(File::create("foo.png")); 

    try!(buffer.write(&byte_string.as_bytes())); 
+0

*あなたが得ているエラー*を含めるようにあなたの質問を編集してください。 – Shepmaster

答えて

1

を修正する方法がわかりません。したがって、&[u8]を印刷し、UTF-8 Stringを印刷する必要はありません。

let out = std::io::stdout(); 
out.write_all(slice)?; 
out.flush()?; 

すぐにプログラムの終了に続いてwrite_allは、基礎となるファイルディスクリプタにバイトを提供するために失敗したので、flushが必要です。

錆はu8配列の文字列処理をしていないので、手動でadbのマングリングを元に戻し、現在のものが\ rで、次のものが\ nであるかどうかをチェックして現在のものをスキップする必要があります。

+0

OPはどのようにして '\ r'の置き換えを実行しますか? – Shepmaster

+0

最後のバイトをスキップするだけです – the8472

関連する問題