C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[57318] Re:Re:안녕하세요. 빌더 초보의 질문입니다.
JS [jirinsul] 1007 읽음    2009-06-19 12:58
답변 감사드립니다. __) 덕분에 해결 했습니다. ^^*



김시환 님이 쓰신 글 :
: TImage  컴포넌트의 Pixels  라는 속성값을 읽어오면 RGB를 추출할 수 있습니다.
:
: Image->Picture->Bitmap->Canvas->Pixels[X][Y] ;
:
: Pixels 는 TColor 값을 추출해 줍니다.
:
: TColor 은 32bit 정수값과 같은 값으로 정의가 가능합니다.
: 따라서 0x00000000 ~ 0xffffffff 값으로 표현이 가능합니다. 이중에서 상위 8비트는 사용을 하지 않고
:
: 다음 8비트 단위로 Blue, Green, Red 의 순으로 값을 가지고 있습니다.
:
: 따라서
: 0x00 ff 00 00   <-  Blue
: 0x00 00 ff 00   <-  Green
: 0x00 00 00 ff   <- Red
: 이렇게 표현이 됩니다.   따라서 이 상위 8비트를 제외한 나머지 24비트로서 색상을 표현하는 것입니다. 
:
: 따라서 각각의 RGB를 추출하려면
:
: unsigned char R,G,B ;
: TColor color ;
:
: color = Image->Picture->Bitmap->Canvas->Pixels[X][Y] ;

: R = color & 0xff ;
: G = (color>>8) & 0xff ;
: B = (color>>16) & 0xff
:
: 이렇게 하면 되겠네요..
:
: 그런데 질문의 내용이 이미지를 비교하는 내용인것 같으므로 굳이 RGB를 각각 나눌 필요성 보다는
: 2차원 정수 배열을 만들어서 선택한 영역을 정수 배열에 저장하고
: 비교할 때는 Pixels 값만 읽어와서 정수 위치와 비교하는 것이 좋을듯 합니다.
:
:
:
:
:
:
:
:
: JS 님이 쓰신 글 :
: : 안녕하세요, 회원가입하고 눈팅만 해온지 꽤 된 빌더 초짜입니다.
: : 거의 매일 포럼에 들어와서 여러가지 정보를 캐치해 가며 공부를 하고 있습니다.
: : 물론 바이블 도 틈틈히 보면서, 포럼과 책의 내용도 비교해가면서 제 것으로 만들어 가고 있는중입니다.
: : 그래서 항상 감사해 하고 있습니다.
: :
: : 프로그래밍을 하다가, 어떤 부분에서 막혀서 더이상 진행이 불가능하네요.
: : 제가 하려는 프로그래밍의 대략적인 진행순서는,
: : 폼에 이미지(사진)로드 -> 마우스 이벤트(Down, Up, Move)로 범위 지정(드래깅을 사용했어요.) -> 범위지정한
: : 부분의 RGB 추출 -> 폼의 이미지(사진)의 모든 부분과 매치 -> 범위지정한 부분과 같은부분(x축, y축의 길이는 같다.)
: : 이 있다면 -> 렉텡글 박스로 표시.
: :
: : 이정도 입니다. 폼에 이미지 로드 하고 마우스 이벤트로 범위 지정은 했습니다 // 기초부분.
: :
: : 단, 범위지정은 MouseDown일때의 픽셀값과, MouseUp일때의 픽셀값을 구해서, Rectangle로 그렸습니다.
: : -->물론 이렇게 한건 그냥 Rect를 그린것이지 범위 지정한 부분은 아니라고 생각합니다만, 픽셀값을 얻어냈으므로,
: : 연산을 통해 구할 수 있다고 생각합니다.(ex: MouseUp좌표 - MouseDown좌표)
: :
: : 질문 1)
: : <-- 더 좋은 방법이 있다면, 조언과 설명 부탁드릴게요.
: :
: : 참으로 오랫동안 그리고 여러번 RGB에 관하여 검색을 해봤습니다. 책도 찾아가며 공부를 해봤습니다만,
: : RGB를 추출하는 법을 모르겠습니다. (FAQ에 나와있는 방법을 해봤습니다만, MouseUp이벤트가 발생할때
: : 로 적용을 하지 못하겠습니다.) 그리고 DirectShow를 사용 하면 훨씬 간편하다라는 글을 여러번 봤습니다만,
: : 이 프로그래밍을 완성하고 난 후부터 사용 할 것입니다. 원리를 알아야 한다는 생각에..
: :
: : 질문 2)
: : <-- MouseMove 이벤트로 Rect를 그렸습니다. Rect안에 있는 한개의 픽셀의 RGB 추출하는 방법만
: : 알아도 모두 구할수 있을 것 입니다. RGB 추출하는 방법을 가르쳐 주세요.
: :
: : Rect 범위 안에 있는 그림은 폼의 이미지(로드한 이미지)의 모든 부분과 매치를 시켜서 같은 부분을 찾습니다.
: : 제가 생각한 알고리즘은 Rect 범위 안에 있는 픽셀들의 RGB 값을 배열에 저장해서,  저장된 배열과 같은 배열을
: : 검색하는 것입니다. 단, 시간이 매우 오래 걸릴것 같은 느낌은 듭니다...
: :
: : 질문 3) 제가 생각한 알고리즘의 문제점이나, 기타 더 좋은 방법 있다면, 조언과 설명 부탁드리겠습니다.
: :
: : 질문은 여기까지 입니다.
: :
: : 사실 여기에 질문을 올리게 된 건, 다 RGB 때문이네요. 좀더 머리 아프며 고민해 보려고했지만,
: : 토할것 같아서 머리를 잠시 식히려고 합니다. 그래도 아침이면 다시 프로그래밍을 하고 있겠죠.
: :
: : 답변이 달릴지는 모르겠으나, 답변을 해주신다면 정말, 대단히 감사드리겠습니다.
: : 또, 절대로 고민해보고, 검색해보고, 공부해보고 올리는 질문이니 날로 먹으려고 한다는 생각은 하지 말아주세요.
: :
: : - 수정 : 어제 많이 정신이 없었나보네요. 델파이 포럼에다가 글을 올렸었군요.. 삭제하고, 다시 씁니다 -

+ -

관련 글 리스트
57298 안녕하세요. 빌더 초보의 질문입니다. JS 957 2009/06/18
57303     Re:안녕하세요. 빌더 초보의 질문입니다. 김시환 1103 2009/06/18
57318         Re:Re:안녕하세요. 빌더 초보의 질문입니다. JS 1007 2009/06/19
57301     Re:안녕하세요. 빌더 초보의 질문입니다. 김동욱 928 2009/06/18
57319         Re:Re:안녕하세요. 빌더 초보의 질문입니다. JS 966 2009/06/19
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.