I am using the emulator. So definitely I have the root permission. I use command:
adb pull /dev/graphics/fb0 d:/a
and then use my program to read this file and generate a bmp. It is successful. But when I use pure java code to do this:
Process process = Runtime.getRuntime().exec("su -c cat /dev/graphics/fb0");
process.waitFor();
InputStream is = process.getInputStream();
is.read(buffer, 0, width*height*2);
The buffer can not get the correct data. All the data is 0, while the correct is 0xFF at the first several line.
Then I tried:
adb shell
cat /dev/graphics/fb0 > /sdcard/tmp
The tmp file also got the correct data. Why the pure java code failed? Is the way I used the Process class wrong?
Since the fb0 is a buffer file, it is an always-changing file, you should copy it to a certain ACCESSIBLE destination then read it with FileInputStream
, easily having the correct data.
Like:
("cat /dev/graphics/fb0 > /dev/myRawFrame.raw");
File CurrentRawFile = new File("/dev/myRawFrame.raw");
and you're done :)
来源:https://stackoverflow.com/questions/7356503/why-cannot-i-read-data-from-dev-graphics-fb0