|
안녕하세요. 이번에 화상캠 제어 프로그램을 작업하고있는데
나름대로 여기 저기 소스 구해가면서 짜고있습니다.
문제는 프리뷰 말고 프레임 소스를 받아서 다른 위치에 쏴야하는데
검은 색으로만 나옵니다. 제가 이쪽 분야 지식이 없어서...
보시고 잘못된 부분이 어딘지 좀 가르쳐 주세요.
소스 내려갑니다.
//---------------------------------------------------------------------------
#include <vcl.h>
#include <Vfw.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
HWND hwnd;
BITMAPINFO bi;
//---------------------------------------------------------------------------
LRESULT CALLBACK capVideoStreamCallback(HWND hWnd, LPVIDEOHDR lpVHdr)
{
HBITMAP hb;
HDC hdc;
hdc = GetDC(Form1->Panel1->Handle);
hb = CreateCompatibleBitmap(hdc, 640, 480);
SetDIBits(hdc, // handle of device context
hb, // handle of bitmap
0, // starting scan line
480, // number of scan lines
lpVHdr->lpData, // array of bitmap bits
&bi, // address of structure with bitmap data
DIB_RGB_COLORS);
BITMAP bm;
HDC hMemDC;
POINT pt;
if (hb)
{
hMemDC = CreateCompatibleDC(hdc);
SelectObject(hMemDC, hb);
GetObject(hb, sizeof(BITMAP), (LPSTR)&bm);
BitBlt(hdc, 0, 0, 640, 480, hMemDC, 0, 0, SRCCOPY);
DeleteDC(hMemDC);
}
ReleaseDC(NULL, hdc);
DeleteObject(hb);
return (LRESULT)TRUE;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
//캡쳐윈도우 생성
hwnd = capCreateCaptureWindow(
"default_cam",
WS_CHILD | WS_VISIBLE,
50,
150,
640,
480,
Handle,
0
);
//콜백함수 연결
capSetCallbackOnFrame(hwnd, capVideoStreamCallback);
//드라이버 얻기
bool bReady = capDriverConnect(hwnd, 0);
if (bReady)
{
bool bOK;
//비디오 포맷 확인 및 설정
DWORD dwSize = capGetVideoFormatSize(hwnd); //구조체정보 크기
capGetVideoFormat(hwnd, &bi, dwSize);
// capSetVideoFormat(hwnd, &bi, dwSize);
//fps지정(ms)
bOK = capPreviewRate(hwnd, 67); //67ms=15fps
//프리뷰
bOK = capPreview(hwnd, true);
//프리뷰 해제
//capPreview(hwnd, false);
//capCaptureSequenceNoFile(hwnd);
} // if
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
//프리뷰 해제
capPreview(hwnd, false);
//윈도우 제거
DestroyWindow(hwnd);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
ShowMessage("캡쳐");
}
//---------------------------------------------------------------------------
|