#include <windows.h>
#include "vfw.h"
#pragma comment(lib, "vfw32.lib")
#define BITMAP_MAXSIZE (1024*768*3+10)
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
LRESULT CALLBACK FramInfo(HWND, LPVIDEOHDR);
HINSTANCE g_hInst;
HWND Hwndmain;
LPCTSTR lpszClass=TEXT("WiseCat");
HWND vfw; //캠 핸들
BITMAPINFO Bm; //캠 정보 저장 구조체
int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance
,LPSTR lpszCmdParam,int nCmdShow)
{
HWND hWnd;
MSG Message;
WNDCLASS WndClass;
g_hInst = hInstance;
WndClass.cbClsExtra=0;
WndClass.cbWndExtra=0;
WndClass.hbrBackground=(HBRUSH)(COLOR_WINDOW+1);
WndClass.hCursor=LoadCursor(NULL,IDC_ARROW);
WndClass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
WndClass.hInstance=hInstance;
WndClass.lpfnWndProc=WndProc;
WndClass.lpszClassName=lpszClass;
WndClass.lpszMenuName=NULL;
WndClass.style=CS_HREDRAW | CS_VREDRAW;
RegisterClass(&WndClass);
hWnd=CreateWindow( lpszClass
,lpszClass
,WS_OVERLAPPEDWINDOW
,CW_USEDEFAULT
,CW_USEDEFAULT
,CW_USEDEFAULT,CW_USEDEFAULT
,NULL
,(HMENU)NULL
,hInstance
,NULL);
ShowWindow(hWnd,nCmdShow);
while(GetMessage(&Message,NULL,0,0))
{
TranslateMessage(&Message);
DispatchMessage(&Message);
}
return (int)Message.wParam;
}
HDC hdc;
BITMAPFILEHEADER * stpBFH;
BITMAPINFOHEADER * stpBIH;
unsigned char * ucpPixel;
unsigned char *ucBitBuffer;
HBITMAP MyBit;
HBITMAP OldBit;
HDC MemDC;
unsigned int uiPad;
unsigned int uiX;
unsigned int uiY;
LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
PAINTSTRUCT ps;
HANDLE hFile;
DWORD dwReadSize;
switch(iMessage)
{
case WM_CREATE:
Hwndmain = hWnd;
ucBitBuffer=(unsigned char *)malloc(BITMAP_MAXSIZE);
hFile=CreateFile(TEXT("smart.bmp"),GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if(hFile == INVALID_HANDLE_VALUE)
{
MessageBox(hWnd,TEXT("image.bmp 파일을 열기 실패하였습니다."),TEXT("파일에러"),MB_OK);
DestroyWindow(hWnd);
}
ReadFile(hFile,ucBitBuffer,BITMAP_MAXSIZE,&dwReadSize,NULL);
CloseHandle(hFile);
stpBFH=(BITMAPFILEHEADER *)ucBitBuffer;
stpBIH=(BITMAPINFOHEADER *)(ucBitBuffer+sizeof(BITMAPFILEHEADER));
uiX=(unsigned int)stpBIH->biWidth;
uiPad=uiX%4;
uiY=(unsigned int)stpBIH->biHeight;
//캠 윈도우 생성
vfw = capCreateCaptureWindow( TEXT("CAM")
,WS_CHILD | WS_VISIBLE
,0
,0
,400
,300
,hWnd
,0);
//캠 장치 연결
capDriverConnect(vfw,0);
//캠 영상 정보 Bm 구조체 저장
capGetVideoFormat(vfw,&Bm,sizeof(Bm));
//캠 윈도우 크기 수정
Bm.bmiHeader.biWidth = 320;
Bm.bmiHeader.biHeight = 240;
//수정된 구조체 적용
capSetVideoFormat(vfw,&Bm,sizeof(Bm));
//capDlgVideoFormat(m_capwnd);
// 콜백함수
capSetCallbackOnFrame(vfw, FramInfo);
//영상 속도 조절
capPreviewRate(vfw, 3);
//미리보기X
capPreview(vfw, FALSE);
return 0;
case WM_PAINT:
hdc = BeginPaint(hWnd,&ps);
EndPaint(hWnd,&ps);
return 0;
case WM_DESTROY:
DeleteObject(MyBit);
free(ucBitBuffer);
PostQuitMessage(0);
return 0;
}
return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}
LRESULT CALLBACK FramInfo(HWND hWnd, LPVIDEOHDR lpData)
{
static int iCntX;
static int iCntY;
static int Jump;
hdc = GetDC(Hwndmain);
//비트맵을 원하는 크기로 확대 또는 축소시켜서 화면에 출력
//원본영상
StretchDIBits(hdc , 0
, 0
, Bm.bmiHeader.biWidth
, Bm.bmiHeader.biHeight
, 0
, 0
, Bm.bmiHeader.biWidth
, Bm.bmiHeader.biHeight
, lpData->lpData
, &Bm
, DIB_RGB_COLORS
, SRCCOPY);
Jump= 0;
ucpPixel=ucBitBuffer+stpBFH->bfOffBits;
for(iCntY = 0; iCntY < Bm.bmiHeader.biHeight ; ++iCntY)
{
for(iCntX = 0; iCntX < Bm.bmiHeader.biWidth ; ++iCntX, Jump += 3, ucpPixel=ucpPixel+3 )
{
// R값이 100이상이면
if(lpData->lpData[Jump + 2] > 100)
{
continue;
}
// G값이 100이상이면
if(lpData->lpData[Jump + 1] > 100)
{
continue;
}
//B값이 50이상이면
if(lpData->lpData[Jump + 0] > 50)
{
lpData->lpData[Jump] = *(ucpPixel); // Blue
lpData->lpData[Jump + 2] = *(ucpPixel+2); // Red
lpData->lpData[Jump + 1] = *(ucpPixel+1); // Green
}
}
ucpPixel=ucpPixel+uiPad;
}
StretchDIBits(hdc , Bm.bmiHeader.biWidth +20
, 0
, Bm.bmiHeader.biWidth
, Bm.bmiHeader.biHeight
, 0
, 0
, Bm.bmiHeader.biWidth
, Bm.bmiHeader.biHeight
, lpData->lpData
, &Bm
, DIB_RGB_COLORS
, SRCCOPY);
ReleaseDC(Hwndmain, hdc);
return 0;
}
'코스웨어 > 14년 스마트컨트롤러' 카테고리의 다른 글
20141008 영상처리 문대영 (0) | 2014.10.08 |
---|---|
20141007 영상처리 이재우 (0) | 2014.10.08 |
20141007 영상처리 허수웅 (0) | 2014.10.08 |
2014.10.07. 업무일지 [출석번호 22 허수웅] (5) | 2014.10.08 |
영상처리 - 이경진 (0) | 2014.10.07 |
2014 10 07 영상처리 보고 (0) | 2014.10.07 |
2014.10.02 업무일지 [출석번호 21 이재우] (8) | 2014.10.07 |
10. 02 업무일지 [ 이경진 ] (13) | 2014.10.06 |