11

私は C で fread と fwrite を少し試していたので、ウェブカメラからデータを取得してファイルにダンプするこの小さなプログラムを C で書きました。以下がソースです。

#include <stdio.h>
#include <stdlib.h>
#define SIZE 307200 // number of pixels (640x480 for my webcam)
int main() {
    FILE *camera, *grab;
    camera=fopen("/dev/video0", "rb");
    grab=fopen("grab.raw", "wb");
    float data[SIZE];
    fread(data, sizeof(data[0]), SIZE, camera);
    fwrite(data, sizeof(data[0]), SIZE, grab);
    fclose(camera);
    fclose(grab); 
    return 0;
}

プログラムはコンパイル時に動作します ( gcc -o snap camera.c)。驚いたことに、出力ファイルは生データのダンプではなく、JPEG ファイルでした。プログラムの出力ファイルに対する Linux でのコマンドの出力は、fileそれが JPEG 画像データであることを示しました: JFIF Standard 1.01。ファイルは画像ビューアで表示できましたが、少し飽和していました。

どのように、またはなぜこれが起こるのですか?ソースまたはプログラムで JPEG エンコーディング ライブラリを使用しませんでした。カメラはネイティブで JPEG を出力しますか? ウェブカメラは Logitech 製の Sony Playstation 2 EyeToy です。システムは Debian Linux です。

4

1 に答える 1