안녕하세요...
아래는 c++ 이미지에 xor을 주는 부분이라고 합니다.
포인터에 머리가 어지럽습니다.
델파이로 좀 어떻게 안될까요?
포인터 부분만 이라도....
*(prgb + 1) 이게 도대체 뭔가요?
BYTE *pData; // Pointer to the actual image buffer
long lDataLen; // Holds length of any given sample
int iPixel; // Used to loop through the image pixels
pSample->GetPointer(&pData);
lDataLen = pSample->GetSize();
// Get the image properties from the BITMAPINFOHEADER
int iPixelSize = pvi->bmiHeader.biBitCount / 8;
int cxImage = pvi->bmiHeader.biWidth;
int cyImage = pvi->bmiHeader.biHeight;
int cbImage = cyImage * cxImage * iPixelSize;
int numPixels = cxImage * cyImage;
// Transform it to its XOR image according the parameters
BYTE *prgb = (BYTE*) pData;
for (iPixel=0; iPixel < numPixels; iPixel++, prgb+=iPixelSize) {
*(prgb) = *(prgb) ^ 0xff; // B channel
*(prgb + 1) = *(prgb + 1) ^ 0xff; // G channel
*(prgb + 2) = *(prgb + 2) ^ 0xff; // R channel
예를 들어 prgb가 메모리상에 1000h번지에 있을때
그다음 번지인 1001h에 있는 값을 가리키는 겁니다.
*(prgb + 2) 이거는 당연히 1002h가 되게쬬....
쉽게 이해 하실려면요
걍 배열이라고 생각 하세요.
prgb 는 prgb[0] 이구
*(prgb + 1) 는 prgb[1] 이구
*(prgb + 2) 는 prgb[2] .......... 이런식이죠...
그럼 즐델.....^^;;