C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[60519] 캠 전문가분 소스좀 봐주세요.
locke [syiware] 2026 읽음    2010-03-19 18:15
안녕하세요. 이번에 화상캠 제어 프로그램을 작업하고있는데
나름대로 여기 저기 소스 구해가면서 짜고있습니다.
문제는 프리뷰 말고 프레임 소스를 받아서 다른 위치에 쏴야하는데
검은 색으로만 나옵니다. 제가 이쪽 분야 지식이 없어서...
보시고 잘못된 부분이 어딘지 좀 가르쳐 주세요.
소스 내려갑니다.

//---------------------------------------------------------------------------

#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("캡쳐");
}
//---------------------------------------------------------------------------

+ -

관련 글 리스트
60519 캠 전문가분 소스좀 봐주세요. locke 2026 2010/03/19
60544     이길남님..감사합니다. locke 1413 2010/03/22
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.