VFW의 함수를 이용하여 캠영상을 간단히 얻어와 사용하실 수 있습니다.
#include <vfw.h>
// 캡쳐 윈도우를 생성한다.
hWndC1 = capCreateCaptureWindow ( "My Own Capture Window",
WS_CHILD | WS_VISIBLE , 10, 50, 160, 120, GetSafeHwnd(), 2222);
// 캡쳐윈도우와 캡쳐드라이브를 연결시킨다.
capDriverConnect (hWndC1, 0);
// 캡쳐 비디오 포멧크기를 얻어낸다.
dwSize = capGetVideoFormatSize(hWndC1);
// 포멧 크기만큼 메모리를 할당해준다.
lpbi = (LPBITMAPINFO)GlobalAllocPtr (GHND, dwSize);
// 비디오 포멧을 얻어낸다.
capGetVideoFormat(hWndC1, lpbi, dwSize);
// 변경된 비디오 포멧을 셋팅한다.
capSetVideoFormat(hWndC1, lpbi, dwSize);
// 밀리세칸드 단위로 초당 프레임 수를 할당하는 부분이다.
capPreviewRate(hWndC1, 66); // rate, in milliseconds
// 프리뷰기능에서 scalablity를 설정한다.
capPreviewScale(hWndC1, TRUE);
capPreview(hWndC1, TRUE); // starts preview
// 아래 소스는 일정시간마다 이미지를 캡쳐하는 로직(타이머를 이용한다.)
capEditCopy(hWndC1); // 캡쳐 윈도우를 클립보드에 저장
if(hWndC1)
{
// 클립보드에서 dib형식의 이미지 버퍼를 읽어온다.
CImageBuffer* CIB = LoadImageFromClipboard(this);
// 메모리 화일을 오픈한다.
tfile.Open("",CFile::modeCreate | CFile::modeWrite);
tfile.SeekToBegin();
// jpeg으로 압축하기 위한 클래스
CImageJpegCodecProcessor jpegCodec;
// jpeg으로 압축해서 결과를 저장할 화일명..
jpegCodec.SetIOFile(&tfile);
// 압축할 이미지버퍼를 설정한다.
jpegCodec.DeclareInputImage(CIB);
// 압축모드를 설정한다.
jpegCodec.SetCompressionMode(CIMAGE_CODEC_LOWQUALITY);
// jpeg형식으로 변환을 실행한다.
BOOL bOK=jpegCodec.ProcessorFunction()==NULL;
// 결과는 tfile에 저장된다.
delete CIB;
//CIB->~CImageBuffer();
}
전체적인 소켓 알고리즘...
CChatServerSocket : 일반 텍스트 채팅용 서버소켓
CChatChildSocket : 일반 텍스트 채팅용 차일드 소켓
CChatClientSocket : 일반 텍스트 채팅용 클라이언트 소켓
위의 세가지 소켓은 TCP형식의 소켓으로 (SOCK_STREAM)에러 처리및 일반 채팅을 위한 소켓들
Receive, Send함수 사용
알고리즘 방식
(1) 서버/클라이언트 모드중 하나를 선택한다.
(2) 서버모드이면, Create(portnumber), Listen()
클라이언트면 Connect(serveraddress)한다...
에러 검증한다.
(3) 클라이언트/서버간에 코덱 정보를 교환한 후...(ICInfo, ICGetInfo)일치 시킨다.
(4) 일반 텍스트 채팅 실시한다..
CVideoServerSocket : 비디오 전용 서버 소켓.
CVideoClientSocket : 비디오 전용 클라이언트 소켓.
위의 두가지 소켓은 UDP(SOCK_DGRAM)형식의 소켓으로 캡쳐한 이미지를 압축해서 보낼 때..
받거나 보내는데 필요한 클래스들이다.
ReceiveFrom, SendTo 함수 사용
알고리즘 방식
(1) 일단 무조건 CVideoServerSocket으로 Create(port number)한다.
(2) 클라이언트로 부터 접속이 들어오면, RecieveFrom으로 이미지사이즈와 이미지
정보를 받는다. 읽어온 이미지를 jpeg형식으로 특정 윈도우에 써준다.
이때, 동시에 타이머로 잡아온 이미지 정보를 접속한 클라이언트로 보내준다.
(3) 계속 반복한다.
'■ 프로그래밍, 개발' 카테고리의 다른 글
### 파일 버젼 얻어 오기 GetFileVersion (0) | 2014.01.31 |
---|---|
문자열 변환 [아스키 유니코드] ASCII <-> UNICODE (0) | 2014.01.31 |
리스트 박스안에 긴 화일명 넣기 (0) | 2014.01.31 |
ActiveX 컨트롤로부터 URL 알아내기 (0) | 2014.01.31 |
레지스트리(registry) 란 (0) | 2014.01.31 |
댓글