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
[17604] Re:[왕초보]image의 한부분 pixcel의 RGB값을 빼내려 하는데요..어케???
유영인 [Chris] [cuperido] 1020 읽음    2002-04-15 19:36
픽셀을 뺄 수 있는 방법은 흔히 쓰이는 방법 2가지가 있습니다. 첫째로, Image가 가지고 있는 Pixels 라는 프로퍼티를 이용하는 것입니다.

Color = Image1->Bitmap->Canvas->Pixels[X][Y];

이런식으로 X, Y 좌표의 값을 뽑아올 수 있습니다.

하지만, Pixels 프로퍼티는 상당히 느립니다. 그렇기 때문에, Scanline을 사용합니다. Scanline은 Line 단위로 줄을 긁어와 다시 픽셀을 구하는 방식입니다.

RGBTRIPLE         *rtColor;

Image1->Bitmap->PixelFormat = pf24bit;


for(itY = 0; itY < MAX_HEIGHT; itY ++) {
   rtColor = (RGBTRIPLE *)Image1->Bitmap->ScanLine[itY];

   for(itX = 0; itX < MAX_WIDTH; itX ++) {
     CAPTURE_POINT[itX][itY] = (int)RGB(rtColor->rgbtRed, rtColor->rgbtGreen, rtColor->rgbtBlue);
     rtColor++;
   }
}

이런식으로 작업할 수 있습니다. 원리는 ScanLine을 뽑아, 메모리 주소를 증가함으로써, 다음 색깔을 얻는 방식입니다. pf24bit 로 설정해 주지 않으면, 각 해당하는 번지 수가 틀려 이상한 색을 뽑아올 수 있으니, pf24bit 로 꼭 설정을 해 두셔야 합니다.


하지만, ScanLine은 긁어오는 시점에서 약간 멈춤이 있습니다. (눈에 띄이진 않지만, 계속 작업하다보면 멈춤 현상이 나타납니다) 상황 판단을 하셔서 어떤 방식을 사용하실지는 미혜님이 결정하셔야 할 문제입니다.


미혜 님이 쓰신 글 :
:  for (y=0; y<height; y++)
:     {
:         p1 = SourceImage->ScanLine[y];
:         for(x=StartX; x<DestX; x++, p1++, p2++)
:         {
:         .........
:         }
:     }
:
: 이렇게 높이 height는 모두 값을 빼내구요..
: width만 중간 부분의 pixcel값을 빼내려 합니다.
: ScanLine[y] --> 이거는 row 값이라 하더군요..
:
: 그럼 다음 for문에서 x의 위치만 지정하면 될꺼 같은데..
: 왜 0,0부터 시작할까요??
:
: 고수님들 제발 알려주세요...`~~~~

+ -

관련 글 리스트
17603 [왕초보]image의 한부분 pixcel의 RGB값을 빼내려 하는데요..어케??? 미혜 813 2002/04/15
17604     Re:[왕초보]image의 한부분 pixcel의 RGB값을 빼내려 하는데요..어케??? 유영인 [Chris] 1020 2002/04/15
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.