/***영상처리***/
#include <windows.h>
#include <Vfw.h>
#define XSCALE 320
#define YSCALE 240
#define MALPHA 180
#define GALPHA 20
#define HALPHA (MALPHA + GALPHA)
#define LALPHA (MALPHA - GALPHA)
BITMAPINFO stBMPInfo;
typedef struct _msgmap
{
UINT uiMsg;
LRESULT(*fp)(HWND, WPARAM, LPARAM);
} stMsgMap;
LRESULT OnPaint(WPARAM, LPARAM);
LRESULT OnCreate(WPARAM, LPARAM);
LRESULT OnDestroy(WPARAM, LPARAM);
LRESULT capture(HWND, LPVIDEOHDR);
stMsgMap MsgMap[] =
{
{ WM_PAINT, OnPaint },
{ WM_CREATE, OnCreate },
{ WM_DESTROY, OnDestroy },
{ WM_NULL, 0 }
};
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
HINSTANCE g_hInst;
LPSTR lpszClass = TEXT("smart");
HWND hWnd;
DWORD dwBufferLength;
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance
, LPSTR lpszCmdParam, int nCmdShow)
{
MSG Message;
WNDCLASS WndClass;
g_hInst = hInstance;
WndClass.cbClsExtra = 0;
WndClass.cbWndExtra = 0;
WndClass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
WndClass.hCursor = LoadCursor(NULL, IDC_ARROW);
WndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
WndClass.hInstance = hInstance;
WndClass.lpfnWndProc = (WNDPROC)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, 0, 0, 0)) {
TranslateMessage(&Message);
DispatchMessage(&Message);
}
return Message.wParam;
}
LRESULT CALLBACK WndProc(HWND hWpWnd, UINT iMessage, WPARAM wParam, LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
hWnd = hWpWnd;
stMsgMap *stpMap = MsgMap;
while (WM_NULL != ((*stpMap).uiMsg))
{
if (iMessage == ((*stpMap).uiMsg))//dest가 들어오면
{
return (((*stpMap).fp)(hWnd, wParam, lParam));
}
++stpMap;
}
return(DefWindowProc(hWnd, iMessage, wParam, lParam));
}
LRESULT OnCreate(WPARAM wParam, LPARAM lParam)
{
HDC hdc;
HWND hCamera;
BOOL bRet;
hCamera = capCreateCaptureWindow(TEXT("samrt")
, WS_CHILD | WS_VISIBLE
, 0, 0, XSCALE, YSCALE
, hWnd, 0);
if (NULL == hCamera)
{
MessageBox(hWnd, TEXT("창을 열수 없음"), TEXT("밝명에러"), MB_OK);
}
bRet = capDriverConnect(hCamera, 0);
if (FALSE == bRet)
{
MessageBox(hWnd, TEXT("카메라가 없음."), TEXT("밝명에러"), MB_OK);
}
capPreviewRate(hCamera, 1);
capGetVideoFormat(hCamera, &stBMPInfo, sizeof(stBMPInfo));
stBMPInfo.bmiHeader.biWidth = XSCALE;
stBMPInfo.bmiHeader.biHeight = YSCALE;
capSetVideoFormat(hCamera, &stBMPInfo, sizeof(stBMPInfo));
capSetCallbackOnFrame(hCamera, capture);
capPreview(hCamera, TRUE);
hdc = GetDC(hWnd);
ReleaseDC(hWnd, hdc);
return 0;
}
LRESULT capture(HWND hWpWnd, LPVIDEOHDR lpVHdr)
{
HDC hdc;
INT iXCnt;
INT iYCnt;
INT iCal;
static BYTE vData[XSCALE*YSCALE * 3];
hdc = GetDC(hWnd);
StretchDIBits(hdc
, XSCALE, 0
, XSCALE, YSCALE
, 0, 0
, XSCALE, YSCALE
, vData, &stBMPInfo, DIB_RGB_COLORS, SRCCOPY);
for (iXCnt = 0; iXCnt < XSCALE; ++iXCnt)
{
for (iYCnt = 0; iYCnt < YSCALE; ++iYCnt)
{
iCal = (iYCnt * XSCALE + iXCnt) * 3;
vData[iCal + 0] = lpVHdr->lpData[iCal + 0];
vData[iCal + 1] = lpVHdr->lpData[iCal + 1];
vData[iCal + 2] = lpVHdr->lpData[iCal + 2];
if (HALPHA < vData[iCal + 0])
{
continue;
}
if (LALPHA > vData[iCal + 0])
{
continue;
}
if (HALPHA < vData[iCal + 1])
{
continue;
}
if (LALPHA > vData[iCal + 1])
{
continue;
}
if (HALPHA < vData[iCal + 2])
{
continue;
}
if (LALPHA > vData[iCal + 2])
{
continue;
}
vData[iCal + 0] = 255;
vData[iCal + 1] = 0;
vData[iCal + 2] = 0;
}
}
ReleaseDC(hWpWnd, hdc);
return 0;
}
LRESULT OnPaint(WPARAM wParam, LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
hdc = BeginPaint(hWnd, &ps);
EndPaint(hWnd, &ps);
return 0;
}
LRESULT OnDestroy(WPARAM wParam, LPARAM lParam)
{
PostQuitMessage(0);
return 0;
}
'코스웨어 > 15년 스마트컨트롤러' 카테고리의 다른 글
2015.11.25_개인업무일지_[Win32API #10]_이량경_알파값 (4) | 2015.11.25 |
---|---|
20151125 - 홍준모 업무일지 영상처리 10일째 - 배경처리(알파값 : ex)일기 예보) (6) | 2015.11.25 |
20151125 강동조 개인업무일지 API(작성중) (4) | 2015.11.25 |
20151125 업무일지 -여지윤- WIN32Api 10 (5) | 2015.11.25 |
20151125 윤재희 #10. 히스토그램, 알파값 (6) | 2015.11.25 |
20151125 수업 / WinAPI_10 / 영상처리-알파값 (6) | 2015.11.25 |
20151125 - 권오민 - WinAPI 10일차 (4) | 2015.11.25 |
20151121 김태현 WinAPI 8일차 동영상 (5) | 2015.11.25 |