代码之家  ›  专栏  ›  技术社区  ›  coolaj86

如何将16位RGB帧缓冲区转换为可视格式?

  •  5
  • coolaj86  · 技术社区  · 14 年前

    /dev/fb/0

    我无法访问客户端应用程序的旧源,但我知道有关数据的以下信息:

    • 720x480毫米
    • 原始(无标题)
    • cat /开发/fb/0
    • 675千字节

    我怎样才能给它一个标题,或者把它转换成JPEG,BMP,或者一个我可以在桌面应用程序中查看的原始类型?

    最终,我希望它是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
    
    2 回复  |  直到 12 年前
        1
  •  5
  •   coolaj86    13 年前

    rgb到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);
      }
    }
    
        2
  •  2
  •   Throwback1986    14 年前

    我正在开发一个5:6:5 RGB格式的嵌入式系统,有时我需要捕获原始帧缓冲区数据并将其转换为可视图像。为了进行实验,我编写了一些C代码,将原始二进制值转换为 link text . 这种格式很愚蠢,但很容易阅读-因此我发现它方便黑客。然后我用Imagemagick 查看和 转换为JPG。(如果我没记错的话, 转换 将接受原始二进制图像-但这假设您知道所有图像参数,即5:6:5和5:5:5)。