我正在设备上使用其他人的代码,该代码可以将图像放到/dev/fb/0
并显示在视频上或通过网络发送到客户端应用程序。
我无权访问客户端应用程序的旧源代码,但我知道以下有关数据的信息:
cat
- 能够/dev/fb/0
如何为此标题或将其转换为JPEG,BMP或RAW类型,然后我可以在桌面应用程序中查看?
最终,我希望它能够在浏览器中显示jpeg并且可以查看,但是我能用眼睛看到的任何东西现在都可以使用。
(见下面的评论)
ffmpeg \
-vcodec rawvideo \
-f rawvideo \
-pix_fmt rgb565 \
-s 720x480 \
-i in-buffer.raw \
\
-f image2 \
-vcodec mjpeg \
out-buffer.jpg
在横向上三次显示图像,几乎没有颜色,并垂直压扁:
rawtoppm -rgb -interpixel 720 480 fb.raw > fb.ppm
显示图像,但有条纹和垂直压扁且颜色不好:
rawtoppm -rgb -interrow 720 480 fb.raw > fb.ppm
与上述类似
convert -depth 16 -size 720x480 frame_buffer.rgb fb.jpeg
答案 0 :(得分:5)
rgb to ppm:只是品尝季节!
维持在https://github.com/coolaj86/image-examples
#include <stdio.h>
int main(int argc, char* argv[]) {
FILE* infile; // fb.raw
FILE* outfile; // fb.ppm
unsigned char red, green, blue; // 8-bits each
unsigned short pixel; // 16-bits per pixel
unsigned int maxval; // max color val
unsigned short width, height;
size_t i;
infile = fopen("./fb.raw", "r");
outfile = fopen("./fb.ppm", "wb");
width = 720;
height = 480;
maxval = 255;
// P3 - PPM "plain" header
fprintf(outfile, "P3\n#created with rgb2ppm\n%d %d\n%d\n", width, height, maxval);
for (i = 0; i < width * height; i += 1) {
fread(&pixel, sizeof(unsigned short), 1, infile);
red = (unsigned short)((pixel & 0xF800) >> 11); // 5
green = (unsigned short)((pixel & 0x07E0) >> 5); // 6
blue = (unsigned short)(pixel & 0x001F); // 5
// Increase intensity
red = red << 3;
green = green << 2;
blue = blue << 3;
// P6 binary
//fwrite(&(red | green | blue), 1, sizeof(unsigned short), outfile);
// P3 "plain"
fprintf(outfile, "%d %d %d\n", red, green, blue);
}
}
答案 1 :(得分:2)
我正在开发一种采用5:6:5 RGB格式的嵌入式系统,有时我需要捕获原始帧缓冲数据并将其转换为可视图像。为了实验,我写了一些C代码来将原始二进制值转换为link text。格式很笨,但很容易阅读 - 因此我发现它很容易被黑客攻击。然后我使用Imagemagick 显示来查看并转换以转换为JPG。 (如果我没记错的话,转换将接受原始二进制图像 - 但假设您知道所有图像参数,即5:6:5与5:5:5)。
如果需要,我可以发布示例C代码将5:6:5转换为8:8:8 RGB。