Q&A

  • 최용일님! 포인터좀 봐주세요!

안녕하세요...
아래는 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

1  COMMENTS
  • Profile
    바다를향해 2003.06.25 19:02
    *(prgb + 1) 이거의 의미는요
    예를 들어 prgb가 메모리상에 1000h번지에 있을때
    그다음 번지인 1001h에 있는 값을 가리키는 겁니다.
    *(prgb + 2) 이거는 당연히 1002h가 되게쬬....

    쉽게 이해 하실려면요
    걍 배열이라고 생각 하세요.
    prgb 는 prgb[0] 이구
    *(prgb + 1) 는 prgb[1] 이구
    *(prgb + 2) 는 prgb[2] .......... 이런식이죠...

    그럼 즐델.....^^;;