특정 색깔을 파란색으로 바꾸는 것을 해봄.
R 184
G 188
B 187
(184+188+187)/3 =186
#include <windows.h>
#include <Vfw.h>
#include "resource.h"
#define XSCALE 320
#define YSCALE 240
#define MALPHA 186
#define GALPHA 20
#define HALPHA (MALPHA + GALPHA)
#define LALPHA (MALPHA - GALPHA)
BITMAPINFO stBMPInfo;
HBITMAP hBack;
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 ical;
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); //화면을 카메라와 연결한다.(USB장치연결) //0:카메라마다 고유번호
if (FALSE == bRet) //카메라가 없거나 드라이버가 안잡힘.
{
MessageBox(hWnd, TEXT("카메라가 없음."), TEXT("밝명에러"), MB_OK);
}
capPreviewRate(hCamera, 1); //화면에 보일 속도
capGetVideoFormat(hCamera, &stBMPInfo, sizeof(stBMPInfo)); //비디오 형식을 bInfo에 저장
stBMPInfo.bmiHeader.biWidth = XSCALE; //가로, 세로 길이 set
stBMPInfo.bmiHeader.biHeight = YSCALE;
capSetVideoFormat(hCamera, &stBMPInfo, sizeof(stBMPInfo));//bInfo 출력준비
capSetCallbackOnFrame(hCamera, capture);//비디오 라이브러리에서 함수호출
capPreview(hCamera, TRUE); // 영상화면 출력//TRUE:Preview flag
hdc = GetDC(hWnd);
ReleaseDC(hWnd, hdc);
return 0;
}
LRESULT capture(HWND hWpWnd, LPVIDEOHDR lpVHdr)//구조체 정보가 실려온다.
{
HDC hdc;
INT iXCnt;
INT iYCnt;
static BYTE vData[XSCALE*YSCALE * 3];
hdc = GetDC(hWnd);
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;
}
vData[ical + 0] = 255;
vData[ical + 1] = 0;
vData[ical + 2] =0;
}
}
StretchDIBits(hdc
, XSCALE, 0
, XSCALE, YSCALE
, 0, 0
, XSCALE, YSCALE
, vData, &stBMPInfo, DIB_RGB_COLORS, SRCCOPY);
ReleaseDC(hWpWnd, hdc);
return 0;
}
LRESULT OnPaint(WPARAM wParam, LPARAM lParam)
{
HDC hdc;
HDC MemDC;
PAINTSTRUCT ps;
hdc = BeginPaint(hWnd, &ps);
MemDC = CreateCompatibleDC(hdc);
hBack = LoadBitmap(g_hInst, MAKEINTRESOURCE(IDB_BITMAP1));
BitBlt(hdc, 0, 0, 123, 160, MemDC, 0, 0, SRCCOPY);
DeleteObject(hBack);
DeleteDC(MemDC);
EndPaint(hWnd, &ps);
return 0;
}
LRESULT OnDestroy(WPARAM wParam, LPARAM lParam)
{
PostQuitMessage(0);
return 0;
}
'코스웨어 > 15년 스마트컨트롤러' 카테고리의 다른 글
20151126 수업 / ARM 어셈블리 - 남수진 (7) | 2015.11.26 |
---|---|
20151126 - 권오민 - WinAPI 11일차 & ARM ASSEMBLY 1일차 (4) | 2015.11.26 |
20151125_일일업무보고서_박서연_WinAPI(10) (2) | 2015.11.26 |
20151126_김태현_winapi 10일차 (6) | 2015.11.26 |
20151125_안향진_API_10 (6) | 2015.11.26 |
20151125 임현수 업무일지 WIN32API #10 영상 밝기 그래프, 알파값 처리 (4) | 2015.11.25 |
2015.11.25_개인업무일지_[Win32API #10]_이량경_알파값 (4) | 2015.11.25 |
20151125 - 홍준모 업무일지 영상처리 10일째 - 배경처리(알파값 : ex)일기 예보) (6) | 2015.11.25 |