728x90
반응형
<Win32API>✔
================================================================
< 히스토그램 그래프 출력>
✔ PatBlt (HDC hdc
, int nXLeft, int nYLeft
, int nWidth, int nHeight
, DWORD dwRop);
- hdc : DC의 핸들
- nXLeft, nYLeft : 채색을 시작할 좌상단 좌표. 논리 좌표
- nWidth, nHeight : 채색할 사각 영역의 넓이와 높이
- dwRop : 채색 방법을 지정하는 플래그
- 다음 중 하나의 플래그를 지정해 준다.
- 이 플래그들은 현재 DC에 선택되어 있는 브러시의 색상과 화면에 이미 출력되어 있는 그림의 색상을 어떻게 혼합할 것인가를 지정한다.
플래그 | 설명 |
PATCOPY | DC에 선택되어 있는 브러시의 색상을 그대로 출력한다. |
PATINVERT | 브러시의 색상과 화면의 색상을 XOR 연산한다. |
DSTINVERT | 화면의 색상을 반전시킨다. |
BLACKNESS | 팔레트의 0번 색상으로 채운다. 보통 검정색이다. |
WHITENESS | 팔레트의 1번 색상으로 채운다. 보통 흰색이다. |
- 성공하면 0이 아닌 값을 리턴하며 실패할 경우 0을 리턴한다.
PatBlt(MemDC, 0, 0, XGRAPH + 1, YGRAPH, WHITENESS); // 팔레트의 1번색상으로 채움.
for (iCnty = 0; iCnty < YGRAPH; ++iCnty)
{
for (iCntx = 0; iCntx < XGRAPH; ++iCntx)
{
SetPixel(MemDC, 0, iCnty, RGB(0, 0, 0)); // y축 , 세로축
//255나오도록 YGRAP-1-iCnty
if ( YGRAPH+1-iCnty <= uiCnt[iCntx])
{
SetPixel(MemDC, iCntx + 1, iCnty, RGB(0, 0, 0));
}
}
}
<PatBlt : 검은 배경->흰색>
- 겹침영역을 흰색으로 변경
* 그래프
x : 0~255 = 256개 + 축 = 257
(define +1) -1(좌표값)
* 개인적으로 추가 하면 좋아 :
- 평활화 된 이미지하나더 출력
- RGB값 각각의 그래프 출력
* 255나오도록 if (YGRAPH -1-iCnty <= uiCnt[iCntx])
...여러가지 기법이 있다.
<Video For Windows> (마이크로소프트에서 개발한 라이브러리)
1. VFW 라이브러리 추가하기
1) 방법1. 소스로 추가
//#pragma comment(lib, "vfW32.lib")
2) 방법2.
- 프로젝트 링커 옵션에 추가
https://msdn.microsoft.com/ko-kr/library/windows/desktop/ms632600(v=vs.85).aspx
LRESULT OnCreate( WPARAM wParam , LPARAM lParam )
{
HDC hdc;
PAINTSTRUCT ps;
HWND hCamera;
BITMAPINFO bInfo;
//절차가있다.윈도우 생성
hCamera = capCreateCaptureWindow (TEXT ("samrt" )
, WS_CHILD | WS_VISIBLE
, 0, 0, 320, 240
, hWnd, 0);
capDriverConnect ( hCamera, 0); //화면을 카메라와 연결한다.(USB장치연결) //0:카메라마다 고유번호
capPreviewRate (hCamera, 1);//화면에 보일 속도
capGetVideoFormat (hCamera, &bInfo, sizeof (bInfo)); //비디오 형식을 bInfo에 저장
bInfo.bmiHeader.biWidth = 320; //가로, 세로 길이 set
bInfo.bmiHeader.biHeight = 240;
capSetVideoFormat (hCamera, &bInfo, sizeof (bInfo));//bInfo 출력준비
capPreview (hCamera, TRUE ); // 영상화면 출력//TRUE:Preview flag
hdc = GetDC(hWnd);
ReleaseDC(hWnd, hdc);
return 0;
}
사이즈 변경 카메라 화면
>---------------------------------------------------------
capCreateCaptureWindow
HWND VFWAPI capCreateCaptureWindow( LPCTSTR lpszWindowName, DWORD dwStyle, int x, int y, int nWidth, int nHeight, HWND hWnd, int nID );
Returns a handle of the capture window if successful or NULL otherwise.
=========================================================<
>---------------------------------------------------------
capDriverConnect
BOOL capDriverConnect( hwnd, iIndex );
Returns TRUE if successful or FALSE if the specified capture driver cannot be connected to the capture window.
=========================================================<
영상을 뿌리는 것만 되고 영상처리가 안된다.
영상데이터를 받아야한다.
1단계 ) 콜백함수를 등록하는 함수가 이싿.
2) 콜백함수로
>---------------------------------------------------------
https://msdn.microsoft.com/en-us/library/windows/desktop/dd756930(v=vs.85).aspx
capSetCallbackOnFrame
LRESULT CALLBACK capVideoStreamCallback( HWND hWnd, LPVIDEOHDR lpVHdr );
Returns TRUE if successful or FALSE if streaming capture or a single-frame capture session is in progress.
=========================================================<
>---------------------------------------------------------
https://msdn.microsoft.com/en-us/library/windows/desktop/dd757688(v=vs.85).aspx
LPVIDEOHDR
typedef struct videohdr_tag { LPBYTE lpData; DWORD dwBufferLength; DWORD dwBytesUsed; DWORD dwTimeCaptured; DWORD_PTR dwUser; DWORD dwFlags; DWORD_PTR dwReserved[4]; } VIDEOHDR, *PVIDEOHDR, *LPVIDEOHDR;
=========================================================<
BOOL StretchBlt ( HDC hdcDest
, int nXOriginDest, int nYOriginDest
, int nWidthDest, int nHeightDest
, HDC hdcSrc
, int nXOriginSrc, int nYOriginSrc
, int nWidthSrc, int nHeightSrc, DWORD dwRop);
>---------------------------------------------------------
https://msdn.microsoft.com/en-us/library/windows/desktop/dd145121(v=vs.85).aspx
StretchDIBits
int StretchDIBits( _In_ HDC hdc, _In_ int XDest, _In_ int YDest, _In_ int nDestWidth, _In_ int nDestHeight, _In_ int XSrc, _In_ int YSrc, _In_ int nSrcWidth, _In_ int nSrcHeight, _In_ const VOID *lpBits, _In_ const BITMAPINFO *lpBitsInfo, _In_ UINT iUsage, _In_ DWORD dwRop );
DIB_RGB_COLORS : The color table contains literal RGB values.
=========================================================<
2> Xdest : lpdata가 가지고있음.바로옆에 우리가 띄우는 영상 같은영상 2개
BGR중 하나를 주석처리하면 주석 처리된 색이 보인다
* 데이터 크기에 /가로/세로 = 3 으로 RGB가 나온다.
LRESULT capture( HWND hWpWnd , LPVIDEOHDR lpVHdr )//구조체 정보가 실려온다.
{
HDC hdc;
hdc = GetDC(hWnd);
UINT iCntx;
UINT iCnty;
unsigned char cbuf[20];
LPBYTE lpData;
static BYTE vData[ XSCALE* YSCALE*3];
hdc = GetDC(hWnd);
//************************************
memcpy(vData, lpVHdr->lpData, lpVHdr->dwBufferLength); //동영상내부는 그림이다.
for (iCntx = 0; iCntx < XSCALE; iCntx++)
{
for (iCnty = 0; iCnty < YSCALE; iCnty++)
{
//*(vData + (iCnty *XSCALE + iCntx) * 3 + 0) = 255;//G
*(vData + (iCnty * XSCALE + iCntx) * 3 + 1) = 0; //G
*(vData + (iCnty * XSCALE + iCntx) * 3 + 2) = 0; //G
}
}
StretchDIBits(hdc
, XSCALE, 0
, XSCALE, YSCALE
, 0,0
, XSCALE, YSCALE
, vData, &stBMPInfo, DIB_RGB_COLORS, SRCCOPY );
//************************************B
memcpy(vData, lpVHdr->lpData, lpVHdr->dwBufferLength);
for (iCntx = 0; iCntx < XSCALE; iCntx++)
{
for (iCnty = 0; iCnty < YSCALE; iCnty++)
{
*(vData + (iCnty * XSCALE + iCntx) * 3 + 0) = 0; //G
//*(vData + (iCnty *XSCALE + iCntx) * 3 + 1) = 0;//G
*(vData + (iCnty * XSCALE + iCntx) * 3 + 2) = 0; //G
}
}
StretchDIBits(hdc
,0
, YSCALE
, XSCALE, YSCALE
, 0, 0
, XSCALE, YSCALE
, vData, &stBMPInfo, DIB_RGB_COLORS, SRCCOPY );
//************************************G
memcpy(vData, lpVHdr->lpData, lpVHdr->dwBufferLength);
for (iCntx = 0; iCntx < XSCALE; iCntx++)
{
for (iCnty = 0; iCnty < YSCALE; iCnty++)
{
*(vData + (iCnty * XSCALE + iCntx) * 3 + 0) = 0; //G
*(vData + (iCnty * XSCALE + iCntx) * 3 + 1) = 0; //G
//*(vData + (iCnty *XSCALE + iCntx) * 3 + 2) = 0;//G
}
}
StretchDIBits(hdc
, XSCALE //시작점
, YSCALE
, XSCALE, YSCALE
, 0, 0
, XSCALE, YSCALE
, vData, &stBMPInfo, DIB_RGB_COLORS, SRCCOPY );
//************************************R
wsprintf(cbuf, TEXT( "%u"), lpVHdr ->dwBufferLength);
SetWindowText(hWnd, cbuf);
ReleaseDC( hWpWnd, hdc);
return 0;
}
>>>코드<<<<
728x90
'코스웨어 > 15년 스마트컨트롤러' 카테고리의 다른 글
20151124 임현수 업무일지 WIN32API #9 히스토그램 그래프 출력, 카메라 영상 출력 (5) | 2015.11.24 |
---|---|
20151124_안향진_API_9 (6) | 2015.11.24 |
20151124 윤재희 #9 히스토그램, 캠 영상처리 (6) | 2015.11.24 |
20151124_박서연_일일업무일지_WinAPI(9) (7) | 2015.11.24 |
20151124 업무일지 -여지윤- WinApi9 비트맵 이미지 출력 (7) | 2015.11.24 |
20151124-김재홍-영상처리_캠 (6) | 2015.11.24 |
20151124 - 홍준모 - 비트맵 뷰어 마지막, VFW 1일 차 : 원본 사진을 RGB 값 나누어 영상 처리 (5) | 2015.11.24 |
20151124 수업 / WinAPI_9-비트맵 히스토그램 그리기, 영상처리 - 남수진 (7) | 2015.11.24 |