1. SCOPE 연산자.
C++의 객체를 사용하기 위해서는 공간에대한 객체를 이용하는 방법을 알아야 하는데 이는 두가지 방법이 있다.
1) 공간이름::객체이름
즉, :: 이라는 스콥함수를 사용하여 공간의 객체를 이용할 수 있다.
ex) std::cout std::cin std::endl // std공간의 cout, cin, endl 객체를 사용한다는 뜻이다.
2) using namespace 공간이름;
즉, 사용하는 공간을 using namespace 키워드를 사용하여 선언 할 수 있다.
using namespace std; // std공간을 using namespace 키워드를 이용하여 선언
cout << " Hello C World!!" << endl; // 위의 방식과 차이점을 볼 수 있다.
즉, 사용하는 네임스페이스를 선언하고 그 공간의 객체를 사용하는데 코드의 길이를 줄 일 수가 있다. 그리고 사용하기에도 간편하다.
int iA= 100;
int main ()
{
//==scope operater==//
cout <<"1 : "<<iA<<"\n";
// 출력 : 100
int iA = 200;
cout <<"2 : "<<iA<<"\n";
// 출력 : 200
cout <<"3 : "<<::iA<<"\n\n";
// 출력 : 100
1. 전역변수 iA 출력
2. 지역변수 iA 출력 ( 이름이 같아도 다른 함수 안에 있는 변수는 별도의 변수로 활용 가능 )
3. ' ::iA ' 로 전역변수(1) iA 출력
2. bool
암묵적 캐스팅, 자동 캐스팅. define 되어 있는 값을 읽어들여 사용.
//==bool==//
//bool 은 true(1) false(0) 의 논리값을 가진 형식 / 1btye / 초기값을 넣지 않고 출력하면 쓰레기값이 출력 됨.
// ture / false 를 넣어 보자!!
bool bVal = true;
cout<<"TURE : "<<bVal<<"\n";
bVal = false;
cout<<"FALSE : "<<bVal<<"\n\n";
// 출력 : 1, 0
// 숫자를 넣어 보자!!
bVal = 0;
cout<<"INSERT 0 : "<<bVal<<"\n";
bVal = 3;
cout<<"INSERT 3 : "<<bVal<<"\n";
bVal = -1;
cout<<"INSERT -1 : "<<bVal<<"\n\n";
// 출력 : 0, 1, 1
//0 외 값 외에는 1 로 출력 된다.
// size를 출력해 보자!!
cout<<"Size of FALSE is : "<<sizeof(bVal)<<"\n";
cout<<"Size of TRUE is : "<<sizeof(true)<<"\n";
// 출력 : 1, 1 => s=bool 의 size는 1 로 하향 삽입.
3. Reference (참조 값 : C++ 의 포인터)
C는 포인터로 값을 가리킨다.
int a=100
int * p= &a
p는 100의 주소값을 가질 뿐, 값을 참조하는건 아니다. ( 진정한 reference 가 아니다)
a 가 값을 가지고, p 는 a 의 주소를 가진 별개의 메모리를 가진다.
그리고 a를 가리키는 포인터는 계속 양산 할 수 있다.
C++ 의 포인터(?)는 레퍼런스.
해당 변수를 가리키는 새변수를 만드는게 아니라, 같은 주소값을 가지는 변수의 이름이 두가지가 되는 것.
한번 대입하면 못바꾼다!!. 초기화 하면 끝. 다시 사용 할 수 없다.
효율성이 떨어져서 일반적 변수론 사용하지 않는다.
객체 함수 호출할 때 인자로 쓴다.
int iVal = 99;
cout <<"초기 iVal "<<iVal<<"\n";
int &R = iVal;
R=88;
cout <<"참조된 iVal : "<<iVal<<"\n";
// 출력 : 99 , 88
// R은 iVal 을 가리키는 레퍼런스(참고) 변수 이다. R 로 iVal의 값을 변경 시킬 수 있다.
cout <<"iVal의 주소 : "<<&iVal<<"\n";
cout <<"R의 주소 : "<<&R<<"\n\n";
//iVal 과 R 의주소값이 같다.
test (iVal);
void test(int &R)
{
cout<<"R 주소값 인자전달 받은 R 출력 : "<<R<<"\n";
R=3333;
}
*/
cout<<"다른 함수에서 참조 값 변경된 iVal : "<<iVal<<"\n\n";
//출력 : 3333 참조 R 의 주소를 인자로 넘겨, iVal 의 값을 test 함수 안의 R로 변경.
int *iP = &iVal; // iVal 을 가리키는 포인터 iP
int *(&ipR) = iP; // iP의 값을 참조한 포인터 ipR
cout <<"*ipR : "<<*ipR<<"\n";
cout <<"*iP : "<<*iP<<"\n\n";
// 출력값 : 3333, 3333 test 에서 변경한 값이 반영되었다!!
//test(5); //매개 변수 1을(를) 'int'에서 'int &'(으)로 변환할 수 없습니다
int &iTest = test4(iVal);
/*
int& test4(int &R)
{
return R;
}
(iVal 값을) '참조 R' 을 인자로 받는 '참조 iTest' 를 만듬.
iTest는 R 과 마찬가지로 iVal 을 참조한다.
*/
iTest = 123456;
cout<<"iTest가 참조하는 iVal : "<<iVal<<"\n";
4. 동적할당
생성 : new [크기]
return 값: 동적할당 메모리의 첫주소값을 반환하므로, 저장할 포인터값 필요!!!
참조 : 이전과 같이 레퍼런스로 값 삽입 가능.
삭제 : delete
배열의 동적할당 생성 : new void[]
삭제 : delete [](생성시 반환값을 저장한 포인터 변수)
#include <iostream>
using namespace std;
int main ()
{
int * iP;
iP=new int; //동적 할당
int &R = *iP;
R=100;
cout<< *iP<<"\n";
delete iP; //Free
// 배열의 동적할당
iP =new int[3];
delete []iP; //배열 Free
return 0;
}
** 참고 C 와 C++ 동적할당 차이
http://blog.naver.com/abckrra?Redirect=Log&logNo=30189030164
===============================================Ui 제어 ===================================================================
1. 좌우 변경
정상 : x 축 0 ~ 좌측사이즈(Bm.bmiHeader.biWidth)까지 + 이동.
for(xCnt=0 ; Bm.bmiHeader.biWidth> xCnt ;++xCnt)
반대: 좌측사이즈 ( Bm.bmiHeader.biWidth ) 에서 x축 까지 - 이동
for((xCnt = Bm.bmiHeader.biWidth) ;xCnt >0 ;--xCnt)
2. 흑백 / 적색 / 청색 / 녹색 변경하기
pixel 을 화면에 출력 할 때, 해당 색상 외 픽셀을 0 으로 꺼준다!!
원본 :
SetPixel(hMemDC,xCnt-1 ,yCnt-1, RGB(VideoHdr->lpData[Jump+2], VideoHdr->lpData[Jump+1], VideoHdr->lpData[Jump]) );//색상조정
Jump = Jump + 3;
빨간색
SetPixel(hMemDC,xCnt-1 ,yCnt-1, RGB(VideoHdr->lpData[Jump+2], 0,0) )
녹색
SetPixel(hMemDC,xCnt-1 ,yCnt-1, RGB(0,VideoHdr->lpData[Jump+1],0) )
파란색
SetPixel(hMemDC,xCnt-1 ,yCnt-1, RGB(0,0,VideoHdr->lpData[Jump+0]) )
3. 특정색 변경하기
* 특정 비트값 뽑아내기
그림판 -> 돋보기 -> 원하는 포인트 클릭 -> 색 - 색편집 -> RGB 수치 확인
{
if (VideoHdr->lpData[Jump+1] > (" G 색상" -1))
{
if ( VideoHdr->lpData[Jump+0] > ( "B 색상" -1 ) )
{
VideoHdr->lpData[Jump+2]=0; // 빨강색으로 발라주기 ( 255 )
VideoHdr->lpData[Jump+1]=0; // 초록색으로 발라주기 ( 255 )
VideoHdr->lpData[Jump]=255; // 파란색으로 발라주기 ( 255 )
// 일정 색 변환하기. ( 일기예보등에 사용 )
}//E_B
}//E_G
}//E_R
'코스웨어 > 14년 스마트컨트롤러' 카테고리의 다른 글
20141007 영상처리 - 손병규 (0) | 2014.10.07 |
---|---|
영상처리 - 이경진 (0) | 2014.10.07 |
2014 10 07 영상처리 보고 (0) | 2014.10.07 |
2014.10.02 업무일지 [출석번호 21 이재우] (8) | 2014.10.07 |
2014.10.01 업무일지 18번 오영주 (5) | 2014.10.02 |
2014.09.30 일일 교육보고 - 오두환 (11) | 2014.09.30 |
20140929 업무일지 양태영 [16번] (7) | 2014.09.30 |
20140926 업무일지 손병규(출석번호 14번) (9) | 2014.09.28 |