5

/dev/fb/0私は、画像を入れてビデオ出力に表示したり、ネットワーク経由でクライアントアプリケーションに送信したりできるデバイスで、他の誰かのコードを使用しています。

クライアント アプリの古いソースにアクセスすることはできませんが、データについて次のことを知っています。

  • 720×480
  • 16ビット
  • RGB (5,5,5 か 5,6,5 かはわかりません)
  • RAW (ヘッダーなし)
  • cat-できる/dev/fb/0
  • 675キロバイト

これにヘッダーを付けたり、デスクトップ アプリケーションで表示できるように 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

失敗した試行

画像を横方向に 3 回表示し、ほとんど色を付けず、縦方向に押しつぶします。

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
4

2 に答える 2

5

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);
  }
}
于 2010-09-23T20:53:36.790 に答える
2

私は5:6:5 RGB形式の組み込みシステムを開発しており、生のフレームバッファーデータをキャプチャして表示可能な画像に変換する必要がある場合があります。実験のために、生のバイナリ値をリンクテキストに変換するためのCコードを少し作成しました。形式はばかげていますが、読みやすいので、ハッキングするのに便利だと思いました。次に、Imagemagickディスプレイを使用して表示し、JPGに変換するように変換しました。(私が正しく思い出せば、convertは生のバイナリ画像を受け入れます-しかし、それはあなたがすべての画像パラメータ、すなわち5:6:5対5:5:5を知っていることを前提としています)。

必要に応じて、サンプルCコードを投稿して5:6:5から8:8:8RGBに変換できます。

于 2010-09-23T19:02:11.027 に答える