因此要擷取畫面最簡單的方式就是
$ cat /dev/fb0 > fb.raw
再將畫面倒回去
$ sudo cp fb.raw /dev/fb0
但要注意幾點
1. framebuffer 是記憶體 raw data, 因此存檔的結果是一連串的16進位數值, 因此無法使用一般的看圖軟體開啟, 但可以透過 imagemagick 裡的 display 工具顯示(需指定顯示的解析度)
$ display -size 1024x768 rgb:fb.raw
2. 因此還原成一般的 jpg 或是 png 格式需指定 color-depth 和解析度
如果是 24-bit 可以使用 imagemagick 裡的 convert 工具
$ convert -depth 8 -size 640x480 rgb:fb.raw -channel RGB -separate -swap 0,2 -combine fb.png
如果是 16-bit, 可以使用 iraw2png 這支 perl 程式
#!/usr/bin/perl -w $w = shift || 240; $h = shift || 320; $pixels = $w * $h; open OUT, "|pnmtopng" or die "Can't pipe pnmtopng: $!\n"; printf OUT "P6%d %d\n255\n", $w, $h; while ((read STDIN, $raw, 2) and $pixels--) { $short = unpack('S', $raw); print OUT pack("C3", ($short & 0xf800) >> 8, ($short & 0x7e0) >> 3, ($short & 0x1f) << 3); } close OUT;執行 iraw2png 程式:
$ python iraw2png 640 480fb.png
之後就可以用 gpicview 之類的軟體開啟 png 檔案了
$ gpicview fb.png
reference:
* Working with Frame Buffers
* How to do a framebuffer screenshot
* Convert raw BGRA framebuffer to RGB png file (有條件限制使用)
沒有留言:
張貼留言