2012-01-13 8 views
0

이더넷 카메라에서 보낸 jpeg 이미지를 mjpg 스트림에 녹화하려고합니다. 내 Borland C++ 응용 프로그램 (VSPCIP)으로 얻은 이미지는 응용 프로그램 Wireshark에서 저장 한 TCP 스트림 (메모장의 파일 수는 15540, wireshark 파일의 수는 15342)과 동일하게 보이지만 jpeg 콘텐츠 길이는 15342로 알려짐). 즉, 예상보다 많은 198 개의 표시 할 수없는 문자가 있지만 두 파일 모두 247 개의 행이 있습니다. 여기 jpg file difference : wireshark tcp stream 및 C++ 소켓에서.

이 두 파일은 다음과 같습니다 나는 (++ 메모장에 사용할 수있는 도구

(나는 UTF8 또는 ANSI에 표시하려고 http://demo.ovh.com/fr/a61295d39f963998ba1244da2f55a27d/

: 그들은 같은 수의 문자가없는 반면 여전히 일치하는 파일) 또는 다른 편집기) 표시 할 수없는 문자를 볼 수 있습니까? 기본적으로

+0

을, 당신은 바이너리 또는 텍스트 모드에서 파일을 열 수 있습니까? –

+0

내 프로그램에서 TCP 스트림의 바이트를 다음에 저장합니다. BYTE * ImageFrame = new BYTE [ContentLength]; 파일을 만들려면 (그냥 BYTE *의 데이터를 보려면) 다음을 사용하십시오. std :: ofstream * mpofs; mpofs = new std :: ofstream ("out.jpg"); for (int i = 0; i Arnaud

답변

1

std::ofstream는 캐리지 리턴/줄 바꿈 순서 ("\r\n", 이진 0x0d로 및 0x0a)로 바꿈 문자 ('\n' 진 0x0a)를 번역 할 수있는 의미 텍스트 모드에서 파일을 엽니 다.

열기 바이너리 모드에서 출력 파일은 대부분 문제가 해결됩니다 : 당신의 프로그램에서

std::ofstream os("filename", ios_base::out | ios_base::binary); 
+0

ok tak, std :: ios_base 도움 : 좋은 jpg 이미지가 있습니다. 내 문제는 어딘가에 있습니다. 프레임이 불완전하기도합니다. (필자는 그것을 채우는 동안 뮤텍스를 사용하여 바이트를 읽지 않지만, 내가 TCP 스트림을 디코드하는 방식으로, 나는이 방법을 찾고 더 말해 준다.) 감사합니다 – Arnaud

+0

좋아, 내가 "불완전한 jpeg 프레임"을 발견 : 그것은 640x480 jpeg 이미지에 대한 21690 문자를 가지고 있으며, 그들 중 "NUL"값 (Notepad ++에서 NUL로 표시) 값을 가진 문자 다음 5045 문자열이 있습니다. 두 가지 : - 먼저이 손상된 프레임을 제거하고 싶습니다. -이 문자열을 추가하는 이유는 TCP "readbyte"에서 이해하는 것이 좋을 것입니다. – Arnaud

+0

사실 이것을 다른 질문으로 옮깁니다. – Arnaud