Eksperymentowałem trochę z freadem i fwrite w C. Więc napisałem ten mały program w C, aby pobrać dane z kamery internetowej i zrzucić je do pliku. Poniżej znajduje się źródło:Wynik odczytu kamery USB w Linuksie
#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;
}
Program działa gdy kompilowany (gcc -o snap camera.c
). Zaskoczyło mnie to, że plik wyjściowy nie był zrzutem danych surowych, ale plikiem JPEG. Wynik polecenia file
na Linuksie w pliku wyjściowym programów pokazał, że był to obraz JPEG: JFIF Standard 1.01. Plik był widoczny na przeglądarce obrazów, chociaż trochę nasycony.
Jak to się dzieje? Nie użyłem żadnych bibliotek kodujących JPEG w źródle lub w programie. Czy kamera wyprowadza natywnie obraz JPEG? Kamera internetowa to Sony Playstation 2 EyeToy, która została wyprodukowana przez firmę Logitech. System to system Debian Linux.
mogłaby być, że wyjścia kamery JPEG. – doron