2013-06-05 2 views
-1

클라이언트/서버에 웹캠 기능을 구현하고 각 프레임을 JPEG로 소켓을 통해 보내거나받습니다. 이를 위해 JPEG를 바이트 배열로 변환 한 다음 전송합니다. 서버는 이것을 바이트 배열로 받아서 JPEG로 변환합니다.TJpegImage를 바이트 배열로 변환

제 질문은 JPEG을 바이트 배열로 (그리고 그 반대로) 효율적으로 변환하는 방법입니다.

내가 지금하고있는 방식이 아마 이상적이지 않은 것처럼 보입니다. 저는 현재 TMemoryStream을 생성하고 JPEG을 저장 한 다음 바이트 배열로 스트림을 읽습니다. 그런 다음 서버 측에서 일단 배열을 수신하면 TMemoryStream을 작성하고 배열을 작성한 다음 TJpegImage를 작성하고 스트림을로드합니다.

내 방식처럼 많은 단계와 메모리 할당이 필요합니다. 더 좋은 방법이 있습니까?

답변

7

변환 할 필요없이 jpeg 이미지를 스트림에 직접 저장하고 스트림을 전송 한 다음 스트림에서 jpeg을로드 할 수 있습니다.

+0

http://docwiki.embarcadero.com/Libraries/XE4/en/Vcl.Imaging.jpeg.TJPEGImage.SaveToStream : http://docwiki.embarcadero.com/Libraries/XE4/en/Vcl.Imaging.jpeg .TJPEGImage.LoadFromStream ... 참조 용 –

+1

동의어, 특히 'TMemoryStream.Memory' 데이터 블록이'TMemoryStream.Size' 길이의 바이트 배열로 직접 취급 될 수 있기 때문에 (** 동적으로 취급하지 마십시오. ** 배열이 아니기 때문에). –

+0

감사합니다. TMemoryStream.Memory는 읽기 전용이 아닌가? 'ReceiveStream'메서드가있는 소켓 라이브러리를 사용하지 않으므로받는 쪽의 상황에 어떻게 접근해야합니까? – Aaron