char *

char *orig = "Hello, World!";


size_t origsize = strlen(orig) + 1;    // wchar_t *

const size_t newsize = 100;

size_t convertedChars = 0;

wchar_t wcstring[newsize];

mbstowcs_s(&convertedChars, wcstring, origsize, orig, _TRUNCATE);

wcscat_s(wcstring, L" (wchar_t *)");


_bstr_t bstrt(orig);    // _bstr_t

bstr += " (_bstr_t)";


CComBSTR ccombstr(orig);    // CComBSTR

if(ccombstr.Append(L"(CComBSTR)") == S_OK) CW2A printstr(ccombstr);


CString cstring(orig);    // CString

cstring += " (CString)";


string basicstring(orig);    // basic_string

basicstring += " (basic_string)";


String ^systemstring = gcnew String(orig);    // System.String

systemstring += " (System::String)";

delete systemstring;


wchar_t *

wchar_t *orig = L"Hello, World!";


size_t origsize = wcslen(orig) + 1;    // char *

const size_t newsize = 100;

size_t convertedChars = 0;

char nstring[newsize];

wcstombs_s(&convertedChars, nstring, origsize, orig, _TRUNCATE);

strcat_s(nstring, " (char *)");


_bstr_t bstrt(orig);    // _bstr_t

bstrt += " (_bstr_t)";


CComBSTR ccombstr(orig);    // CComBSTR

if(ccombstr.Append(L" (CComBSTR)") == S_OK) CW2A printstr(ccombstr);


CString cstring(orig);    // CString

cstring += " (CString)";


wstring basicstring(orig);    // basic_string

basicstring += L" (basic_string)";


String ^systemstring = gcnew String(orig);    // System.String

systemstring += " (System::String)";

delete systemstring;


_bstr_t

    BSTR을 캡슐화하는 COM 지원 클래스 (comutil.h, comsuppw.lib 또는 comsuppwd.lib)

_bstr_t orig("Hello, World!");


const size_t newsize = 100;    // char *

char nstring[newsize];

strcpy_s(nstring, (char *)orig);

strcat_s(nstring, " (char *)");


wchar_t wcstring[newsize];    // wchar_t *

wcscpy_s(wcstring, (wchar_t *)orig);

wcscat_s(wcstring, L" (wchar_t *)");


CComBSTR ccombstr((char *)orig);    // CComBSTR

if(ccombstr.Append(L" (CComBSTR)") == S_OK) CW2A printstr(ccombstr);


CString cstring((char *)orig);    // CString

cstring += " (CString)";


string basicstring((char *)orig);    // basic_string

basicstring += " (basic_string)";


String ^systemstring = gcnew String((char *)orig);    // System.String

systemstring += " (System::String)";

delete systemstring;


CComBSTR        ATL의 BSTR wrapper 클래스 (atlbase.h)

CComBSTR orig("Hello, World!");

CW2A printstr(orig);


const size_t newsize = 100;    // char *

char nstring[newsize];

CW2A tmpstr1(orig);

strcpy_s(nstring, tmpstr1);

strcat_s(nstring, " (char *)");


wchar_t wcstring[newsize];    // wchar_t *

wcscpy_s(wcstring, orig);

wcscat_s(wcstring, L" (wchar_t *)");


_bstr_t bstrt(orig);    // _bstr_t

bstrt += " (_bstr_t)";


CString cstring(orig);    // CString

cstring += " (CString)";


wstring basicstring(orig);    // basic_string

basicstring += L" (basic_string)";


String ^systemstring = gcnew String(orig);    // System.String

systemstring += " (System::String)";

delete systemstring;


CString        ATL/MFC의 템플릿 클래스인 CStringT의 기본 구현 클래스.

CString orig("Hello, World!");


const size_t newsize = 100;    // char *

char nstring[newsize];

strcpy_s(nstring, orig);

strcat_s(nstring, " (char *)");


// wchar_t * (이 작업을 하려면 먼저 char *로 바꿔야 한다)

size_t origsize = strlen(orig) + 1;

size_t convertedChars = 0;

wchar_t wcstring[newsize];

mbstowcs_s(&convertedChars, wcstring, origsize, orig, _TRUNCATE);

wcscat_s(wcstring, L" (wchar_t *)");


_bstr_t bstrt(orig);    // _bstr_t

bstrt += " (_bstr_t)";


CComBSTR ccombstr(orig);    // CComBSTR

if(ccombstr.Append(L" (CComBSTR)") == S_OK) CW2A printstr(ccombstr);


string basicstring(orig);    // basic_string

basicstring += " (basic_string)";


String ^systemstring = gcnew String(orig);    // System.String

systemstring += " (System::String)";

delete systemstring;


basic_string        STL 클래스 (<string>)

string orig("Hello, World!");


const size_t newsize = 100;    // char *

char nstring[newsize];

strcpy_s(nstring, orig.c_str());

strcat_s(nstring, " (char *)");


// wchar_t * (이 작업을 하려면 먼저 char *로 바꿔야 한다)

size_t origsize = strlen(orig.c_str()) + 1;

size_t convertedChars = 0;

wchar_t wcstring[newsize];

mbstowcs_s(&convertedChars, wcstring, origsize, orig.c_str(), _TRUNCATE);

wcscat_s(wcstring, L" (wchar_t *)");


_bstr_t bstrt(orig.c_str());    // _bstr_t

bstrt += "(_bstr_t)";


CComBSTR ccombstr(orig.c_str());    // CComBSTR

if(ccombstr.Append(L" (CComBSTR)") == S_OK) CW2A printstr(ccombstr);


Cstring cstring(orig.c_str());    // CString

cstring += " (CString)";


String ^systemstring = gcnew String(orig.c_str());    // System.String

systemstring += " (System::String)";

delete systemstring;


System.String        .NET 프레임워크 클래스 (mscorlib)

String ^orig = gcnew String("Hello, World!");


pin_ptr<const wchar_t> wch = PtrToStringChars(orig);


size_t origsize = wcslen(wch) + 1;    // char *

const size_t newsize = 100;

size_t convertedChars = 0;

char nstring[newsize];

wcstombs_s(&convertedChars, nstring, origsize, wch, _TRUNCATE);

strcat_s(nstring, " (char *)");


wchar_t wcstring[newsize];    // wchar_t *

wcscpy_s(wcstring, wch);

wcscat_s(wcstring, L" (wchar_t *)");


_bstr_t bstrt(wch);    // _bstr_t

bstrt += " (_bstr_t)";


CComBSTR ccombstr(wch);    // CComBSTR

if(ccombstr.Append(L" (CComBSTR)") == S_OK) CW2A printstr(ccombstr);


CString cstring(wch);    // CString

cstring += " (CString)";


wstring basicstring(wch);    // basic_string

basicstring += L" (basic_string)";


delete orig;

'C / C++ > COM / ATL / WTL' 카테고리의 다른 글

COM Apartment  (0) 2008.02.28
아파트먼트 종류와 모델에 따른 반응성 차이  (1) 2008.02.28
WTL Button Popup Menu  (0) 2008.02.24

보통 class 안에서 선언된 callback함수는 접근이 안된다.
class T
{
public:
         void CALLBACK test();
}

보통 이렇게 되어 있다고 하면 접근을 하기 위해서 static을 붙여주기도 한다.
class T
{
public:
         static void CALLBACK test();
}



하지만... callback함수 안에서 다시 class 안에 있는 멈버 변수에 접근을 하지 못하게 된다.

내가 해결한 방법으로는
class 안에서 class 변수를 static으로 선언을 해주어서는 this 포인터로 접근하였다.

class T
{
private:
         static T*  m_pInstance;
public:
         void CALLBACK test();
}

생성자에서는
T::T(void)
{
        m_pInstance = this;
}

그리고 마지막으로 전역변수로
T* T::m_pInstance = NULL;


이렇게 하면 callback함수 안에서 class 암에 있는 멤버 변수에 접근이 가능하게 된다.
void CALLBACK T::test()
{
       m_pInstance->변수이름;
       m_pInstance->함수;
}

'C / C++ > WIN32 / MFC' 카테고리의 다른 글

Screen Capture / C++  (0) 2007.09.17
간단하게 만들어 보는 이미지 뷰어(ImageViewer)  (2) 2007.07.16

첨부파일을 포함

//클래스 멤버 변수를 만들고...
//버튼메뉴
CButtonMenu m_BtnMenuFile;

::OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
함수안에서
 m_BtnMenuFile.SubclassWindow(GetDlgItem(IDC_BUTTON_XXX));
 m_BtnMenuFile.SetMenu(IDR_MENU_XXX);

이러면 결과가

사용자 삽입 이미지

이렇게 나온다...
첨부파일 안에 내용을 조금 수정하면 팝업위치를 원하는 위치로 변경시킬 수 있음...
사용자 삽입 이미지

모니터


음... 거금 55만원을 들여서 산 24인치 LCD모니터다...
55만원이기에... 22인치를 2대 살까 걍 24인치 한대살까 고민고민 했지만
24인치... 이모델을 사고싶은 마음이 예전부터 있었기에
확~~~ 질러 버렸다!! ㅎㅎ
.
.
.
대만족.... 한눈에도 안들어오는 큰 화면... ㅋ
아~~ 나도 이제 모니터가 24인치구나~ ㅎㅎ

'My Story' 카테고리의 다른 글

[My Story] 나홀로 여행~  (0) 2009.09.01
[My Story] Microsoft 무선 Bluetooth Notebook Mouse 5000  (0) 2009.06.27
정체성... 앞으로 내가 할 일??  (0) 2008.12.29
블로깅 시작!!  (0) 2007.07.05
vaio sz44  (0) 2007.03.27
* RSA란 암호화와 인증을 할수있는 공개키 암호시스템이다. 이것은 1977년 RonRivest와 Adi Shamir, Leonard Adleman에 의해서 개발되었다. 이것은 다음과 같은 동작원리를 가진다.
커다란 두 소수 p와 q를 가지고, 이 둘의 곱 n=pq을 구한다. n보다 작고 (p-1)(q-1)와 서로소 관계인 e를 정한다. 즉 e는 (p-1)(q-1)와 1을 제외한 어떠한 공통근을 가지지 않는다. 또다른 숫자 d는 (ed-1)이 (p-1)(q-1)로 나누어 질수 있도록 정한다. e와 d값은 공개지수 비밀 지수라 불린다. 공개키는 (n,e)쌍이 되고 비밀키는 (n,d)쌍이 된다. p,q값은 비밀키로 유지하던지 소멸한다.
RSA 암호 예: 송신자가 메시지 m을 암호화 할때는 다음과 같다. c=me mod n,여기서 e와 n은 수신자의 공개키 이다. 이때 수신자는 m=cd mod n 이렇게 하여 메시지 m을 얻는다.

송신자 Alice는 평문 P와 공개키 (n,e) 를 이용하여

 C º Pe mod n 계산하여 암호문  C Bob에게 송신한다

 

 

 수신자 Bob은 개인키 d를 이용하여

Cd º  P mod n 를 계산하여 평문 P를 얻는다.
 

<준비 과정(Setup 과정)>

1. B는 p = 7 과 q = 11을 선택하고 n = 7 * 11 = 77 을 구한다.

2. B는  φ(n) = (p - 1)(q - 1) = 6 * 10 = 60 을 구한다.

3. B는 60과 서로소가 되도록 e = 37 을 선택하고 Euclid 호제법을 이용하여

   ed º 1 mod 60 을 만족하는 d = 13 을 구한다.

60x + 37y = 1

큰수 60 을 작은수 37로 나누겠습니다.
60 = 37 * 1 + 23    23 = (60-37)
제수였던 37을 나머지 23으로 나누겠습니다.
37 = 23 * 1 + 14   14 = (37-23)
제수였던 23을 나머지 14으로 나누겠습니다.
23 = 14 * 1 + 9      9 = (23-14)
14 = 9 * 1 + 5       5 = (14-9)
9 = 5 * 1 + 4         4 = (9- 5)
5 = 4 * 1 + 1     

1 = 5 - 4
1 = 5 - 9 + 5
  = 2 * (14-9) - 9
  = 2 * 14 - 3 * 9
  = 2 * (37-23) - 3 * (23-14)
  = 2 * 37 - 5 * 23 + 3 * 14
  = 2 * 37 - 5 * 23 + 3 * (37-23)
  = 5 * 37 - 8 * 23
  = 5 * 37 - 8 * (60-37)
  = 5 * 37 - 8 * 60 + 8 * 37
  =13 * 37 - 8 * 60

 

4. B 는  n = 77 과 e = 37 을 공개한다.

 

<암호화 과정>

5. A는 공개키 n = 77 과 e = 37 을 이용하여 평문 17로 부터

   C = 17^37 º 52 mod 77 을 계산하여 암호문 52를 B에게 보낸다.

 

<복호화 과정>

6. B는 개인키 n = 77 과 d = 13을 이용하여 암호문 52로 부터

   P = 52^13 º 17 mod 77 을 계산하여 평문 17을 얻는다.


[RSA]
 
-1978년 미국의 Rivest, Shamir, Adleman이 개발한 대표적인 공개키 암호 커다란 두 소수의 곱 n=pq의 인수분해문제에 안전성을 둠
 
[RSA 암복호화과정]
-키선택: 큰 소수 p,q, n=pq 과 자연수 e ( (e,f(n))=1)를 선택 하여  edº1 mod f(n)를 만족하는 e를 찾는다. 공개키 (n,e) , 비밀키 (p,q,d)
 
-암호화: 송신자는 C º Pe mod n 를 계산하여 암호화
-복호화: Cd º  P mod n 로 복호화
 
[모듈라 지수승(exponentiation)]: gk mon n 계산, 암호화 및 복호화의 속도에 가장 큰 영향을 미치며, RSA 뿐만 아니라 대부분의 공개키 암호의 효율성에서 가장 중요한 부분임
 
[RSA 해독]
-n의 소인수  p,q를 구한다
-Euler 함수f(n)의 값을 구한다.
-공개키 e와 공개정보 n을 가지고
 비밀키 edº1 mod f(n)을 만족하는 d를 구한다.
 
[RSA 암호의 안전성을 높이기 위한 조건]
-p와 q는 같지 않고 거의 같은 크기의 자릿수이어야 한다.
-p-1과 q-1은 커다란 소인수를 각각 가져야 한다.
-p-1과 q-1의 최대공약수는 작은 수이어야 한다.
-p와 q 의 크기는 충분히 커야 한다 (현재 1024비트 이상요구)

'Computer Story' 카테고리의 다른 글

PS3용 모션 컨트롤러  (0) 2009.06.05
서버 부하 테스트 툴  (0) 2008.12.22
OpenCV 설치하기  (1) 2007.08.19
비스타 종료버튼을 절전에서 종료로 바꾸기  (0) 2007.07.27
Visual Studio 2005에서 DirectX 설정  (0) 2007.07.24

Screen Capture는 비교적 하는 방법은 간단하다.

아래는 스크린의 내용을 CBitmap 객체에 Attach 하는 함수이다.


void CScreenCaptureDlg::OnBnClickedBtnCapture()
{
    int nScreenWidth, nScreenHeight;


    // 스크린의 넓이와 높이를 받아오는 부분.

    nScreenWidth  = GetSystemMetrics(SM_CXSCREEN);
    nScreenHeight = GetSystemMetrics(SM_CYSCREEN);


    // Desktop의 DC를 얻어오는 곳이다.

    HDC hScreen = ::GetDC(NULL);

   // 스크린의 내용을 그릴 메모리 DC를 생성한다.
    HDC hMem = ::CreateCompatibleDC(hScreen);

 

    // 입력받은 DC의 Compatible DC에 이미지를 주어진 넓이와 높이로 생성한다.
    HBITMAP hbitmap = CreateCompatibleBitmap(hScreen,
                                             nScreenWidth,
                                             nScreenHeight);

 

   // 메모리 DC에 이미지를 그리기 위해 Bitmap Gdi Object를 선택한다.

    HGDIOBJ oldBitmap = ::SelectObject(hMem, hbitmap);

 

   // 메모리 DC에 스크린 이미지를 그린다.
   ::BitBlt(hMem, 0, 0, nScreenWidth, nScreenHeight, hScreen, 0, 0, SRCCOPY);
   

    // 이 뒷부분은 단지 리소스를 해지하기 위한 소스코드이다.

    ::SelectObject(hMem, oldBitmap);

    ::ReleaseDC(NULL, hScreen);
    ::DeleteDC(hMem);


    // 이전의 Bitmap 객체를 없엔다.

    if (m_bmpScreen.GetSafeHandle())
        m_bmpScreen.DeleteObject();


    // 캡춰된 Bitmap Handle을 CBitmap Object에 Attach한다.

    m_bmpScreen.Attach(hbitmap);


    // 캡춰받은 이미지를 WM_PAINT Message가 발생할때 처리하기 위해 클라이언트 영역을 무효화 시킨다.
    Invalidate();
}

OpenCV 초보를 위한 강좌 1편
OpenCV 는 인텔에서 만든 강력한 영상처리 라이브러리입니다. 강력한 기능과 성능에도 불구하고 3D 의 오픈소스 라이브러리인 OpenGL 처럼 알려지지도 않고, 활발하게 개발되지도 않고, 자주 쓰이지도 않아 안타까운 심정입니다. 더욱이 국내에는 아직 활성화된 커뮤니티가 없어 자료를 구하기도 어려운 실정입니다. 그리하여 본인이 자료를 수집하고 공부하는 과정에서 부딪친 문제점들의 해결방법들과 습득한 지식들을 강좌를 통해 풀어나가 보려고 합니다. 강좌는 다음과 같은 목차로 진행될 예정이며 예제 위주와 간결한 문체를 사용하여 정리 하도록 하겠습니다. 개발 환경은 별도로 거론하지 않는다면 다음과 같습니다.

- Windows XP Platform
- Visual C++ 6.0
- OpenCV beta 5.0a

- 목 차 -
1. OpenCV 란 무엇인가?
2. OpenCV 설치하기
3. OpenCV 셋팅
3.1 Visual C++ 6.0
3.2 Visual Studio .Net
4. OpenCV 테스트


- 본 문 -

1. OpenCV 란 무엇인가?
- OpenCV(Open Source Computer Vision) 인텔에서 만든 강력한 영상처리 라이브러리입니다.
- 기초 영상처리서부터 고급 수준의 영상처리 까지 상당한 량의 알고리즘들이 함수로 구현되어 있습니다.
- Binarization, Noise, Motion Detect, Edge Detect, Pattern Recognition, Hidden Markov Model 등등
- 오픈소스로서 스펙만 맞추면 자신의 알고리즘도 라이브러리에 등록 시킬 수 있습니다.
- 인텔의 OpenCV 사이트 http://www.intel.com/technology/computing/opencv/index.htm

2. OpenCV 설치하기
- OS Platform 에 맞게 OpenCV 라이브러리 다운받아 설치합니다.
- Linux 와 Windows 용이 있고 Mac OS 에서도 돌아간다고 합니다.
- 최신 OpenCV 가 Release 되는 곳
  http://sourceforge.net/projects/opencvlibrary
- 다운받기 OpenCV beta 5.0a for Window platform
  http://nchc.dl.sourceforge.net/sourceforge/opencvlibrary/OpenCV_b5a.exe
  http://keihanna.dl.sourceforge.net/sourceforge/opencvlibrary/OpenCV_b5a.exe

3. OpenCV 셋팅
기본적을 OpenCV 를 돌아가게 하려면 크게 4가지 작업을 해주어야 합니다.

1. 첫번째, Visual Studio 셋팅에서 디렉토리 추가하기
개발 환경에서 컴파일러가 헤더 및 라이브러리 파일들을 찾을 수 있도록 한번만 셋팅해 주면 됩니다.

- Include files
  C:\PROGRAM FILES\OPENCV\CXCORE\INCLUDE
  C:\PROGRAM FILES\OPENCV\CV\INCLUDE
  C:\PROGRAM FILES\OPENCV\OTHERLIBS\HIGHGUI
  C:\PROGRAM FILES\OPENCV\OTHERLIBS\CVCAM\INCLUDE

- Library files
  C:\PROGRAM FILES\OPENCV\LIB

2. 두번째, 프로젝트에 Link 하기
  라이브러리 파일들을 링크 해 줍니다.
  원칙적으로는 소스 코드에 쓰인 라이브러리만 링크 해주면 되지만 일일이 어디에 속해 있는 함수인지 알기가 번거로움으로 일반적으로는 앞에 세가지를 기본적으로 링크하면 됩니다.
  cxcore.lib, cv.lib, highgui.lib, cvcam.lib

3. 세번째, 소스파일에 header 파일 include 하기
  #include <cv.h>
  #include <cxcore.h>
  #include <highgui.h>

4. 네번째, dll 파일 복사하기
  C:\Program Files\OpenCV\bin 폴더에서 다음과 같은 파일들을 Workspace 파일이 있는 폴더에 복사 합니다.
만약에 라이브러리를 사용하지 않았을 경우에는 필요한 파일만 복사하면 됩니다.
  cv097.dll, cxcore097.dll, cvcam097.dll, highgui097.dll

3.1 Visual C++ 6.0

1. 메뉴에서 Tools >> Options >> Directories 에서 다음과 같은 디렉토리를 추가합니다.
- Include files 항목에서 추가 할 디렉토리
  C:\PROGRAM FILES\OPENCV\CXCORE\INCLUDE
  C:\PROGRAM FILES\OPENCV\CV\INCLUDE
  C:\PROGRAM FILES\OPENCV\OTHERLIBS\HIGHGUI
  C:\PROGRAM FILES\OPENCV\OTHERLIBS\CVCAM\INCLUDE


  - Library files 항목에서 추가 할 디렉토리
  C:\PROGRAM FILES\OPENCV\LIB


2. 메뉴에서 Project >> Settings >> Link 에 다음과 같은 파일들을 링크합니다.
  Win32 console 로 프로젝트를 생성하셔야 Project 메뉴가 활성화 됩니다.
  좌측 상단에 Settings For 항목은 'All configurations' 로 두고 아래 파일들을
  Object/library modules: 란에 적어 넣습니다.
     cxcore.lib cv.lib highgui.lib cvcam.lib


3. 소스코드에 다음과 같은 헤더 파일들을 include 해줍니다.
  #include <cv.h>
  #include <cxcore.h>
  #include <highgui.h>

4. 다음 폴더에서 나열된 dll 파일들을 현재 작업중인 소스파일이 있는 곳에 복사합니다.
  - 폴더: C:\Program Files\OpenCV\bin
  - 파일: cv097.dll, cxcore097.dll, cvcam097.dll, highgui097.dll


3.2 Visual Studio .Net

위의 과정과 동일하지만 메뉴가 조금 다릅니다.

1. 메뉴에서 Tools >> Options >> Projects >> VC++ Directories 에서 다음과 같은 디렉토리를 추가합니다.

- Include files 항목에서 추가 할 디렉토리
  C:\PROGRAM FILES\OPENCV\CXCORE\INCLUDE
  C:\PROGRAM FILES\OPENCV\CV\INCLUDE
  C:\PROGRAM FILES\OPENCV\OTHERLIBS\HIGHGUI
  C:\PROGRAM FILES\OPENCV\OTHERLIBS\CVCAM\INCLUDE


  - Library files 항목에서 추가 할 디렉토리
  C:\PROGRAM FILES\OPENCV\LIB


2. 메뉴에서 Project >> Properties >> Linker >> Input 에 다음과 같은 파일들을 링크합니다.
  Win32 console 로 프로젝트를 생성하셔야 Project 메뉴가 활성화 됩니다.
  좌측 상단에 Configuration 항목은 'All Configurations' 으로 하고 'Additional Dependencies' 란에 아래 파일들을 적습니다.
    cxcore.lib cv.lib highgui.lib cvcam.lib


3. 소스코드에 다음과 같은 헤더 파일들을 include 해줍니다.
  #include <cv.h>
  #include <cxcore.h>
  #include <highgui.h>

4. 다음 폴더에서 나열된 dll 파일들을 현재 작업중인 소스파일이 있는 곳에 복사합니다.
  - 폴더: C:\Program Files\OpenCV\bin
  - 파일: cv097.dll, cxcore097.dll, cvcam097.dll, highgui097.dll

4. OpenCV 테스트
위의 과정을 통하여 기본 셋팅이 끝났으면 OpenCV 를 이용하여 다음과 같은 간단한 이미지 뷰어를 만들어 보겠습니다. 소스 파일과 VC++ 6.0 에서 컴파일 할 수 있도록 셋팅된 workspace 파일을 아래 링크에 첨부하였습니다.

http://cafe.naver.com/opencv/6

  - 소스 코드(압축 파일 첨부)
  // 소스 코드 시작
  #include <cv.h>
  #include <highgui.h>

  void main()
  {

      IplImage* image = 0;                        
// image 선언
     image = cvLoadImage("t9t9.jpg", 1);     // t9t9.jpg 파일을 읽어 들임

      cvNamedWindow( "T9-viewer", 1);    // 윈도우 생성
      cvShowImage( "T9-viewer", image );  // 이미지를 보여줌
      cvWaitKey(0);                                   // 키 입력을 기다림

      cvDestroyWindow( "T9-viewer" );      // 윈도우 종료
  }

  // 소스 코드 끝


  - 결과 화면


'Computer Story' 카테고리의 다른 글

서버 부하 테스트 툴  (0) 2008.12.22
RSA 암호  (0) 2007.09.19
비스타 종료버튼을 절전에서 종료로 바꾸기  (0) 2007.07.27
Visual Studio 2005에서 DirectX 설정  (0) 2007.07.24
패턴인식의 정의  (4) 2007.02.05

부팅할 때나 윈도우를 새로 깔 때 Press any key to boot CDROM...부분에서 키보드 안먹힐 때가 간혹 있다. PS/2 키보드를 꽂으면 잘 되는데 USB 키보드나 무선 키보드를 꽂아 두면 꼭 이 부분에서 키보드가 안먹힌다. 아무키나 눌러야 윈도우 설치를 시작할 수 있는데 키보드가 안 먹히니 설치 화면으로 들어가지 못한다.

CMOS화면으로 들어가 보면 USB Keyboard Support 라는 메뉴를 찾을 수 있다. 이 부분을 Enable로 설정해 주니 키보드가 제대로 작동 했다. Press any key to boot CDROM...부분에서 정상적으로 키보드를 누를 수 있었다. 무선 키보드들도 대부분 USB포트에 연결 되어 있다. 따라서 이런 방법으로 설정해 주면 윈도우 설치 시에도 문제 없이 USB 키보드나 무선 키보드를 잘 사용할 수 있을 것 같다.

'tip' 카테고리의 다른 글

linux locale 설정 변경  (0) 2009.01.07
linux man page...  (0) 2009.01.04
Mysql 에러별 대처 방법  (0) 2008.12.29
모니터 사이즈 비교  (0) 2007.07.18
Port Scanner  (0) 2007.07.05

+ Recent posts