|
픽셀을 뺄 수 있는 방법은 흔히 쓰이는 방법 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부터 시작할까요??
:
: 고수님들 제발 알려주세요...`~~~~
|