2009年5月31日 星期日

HW4-使用pointer的方式直接access黑白與彩色影像中pixel的數值

// convert white pixels to black pixels and black pixels to white pixels
for (int y=0; yheight; y++) {
uchar* ptr1=(uchar*) (bw->imageData +y*bw->widthStep);
uchar* ptr2=(uchar*) (wb->imageData +y*wb->widthStep);
for (int x=0; xwidth; x++) {
ptr2[x]=255-ptr1[x];
}
}


// Get blue pixels
for (int y=0; yheight; y++) {
uchar* ptr1=(uchar*) (pImg->imageData +y*pImg->widthStep);
uchar* ptr2=(uchar*) (bImg->imageData +y*bImg->widthStep);
for (int x=0; xwidth; x++) {
ptr2[3*x]=ptr1[3*x];
ptr2[3*x+1]=0;
ptr2[3*x+2]=0;
}
}

// Get green pixels
for (int y=0; yheight; y++) {
uchar* ptr1=(uchar*) (pImg->imageData +y*pImg->widthStep);
uchar* ptr2=(uchar*) (gImg->imageData +y*gImg->widthStep);
for (int x=0; xwidth; x++) {
ptr2[3*x]=0;
ptr2[3*x+1]=ptr1[3*x+1];
ptr2[3*x+2]=0;
}
}

// Get red pixels
for (int y=0; yheight; y++) {
uchar* ptr1=(uchar*) (pImg->imageData +y*pImg->widthStep);
uchar* ptr2=(uchar*) (rImg->imageData +y*rImg->widthStep);
for (int x=0; xwidth; x++) {
ptr2[3*x]=0;
ptr2[3*x+1]=0;
ptr2[3*x+2]=ptr1[3*x];
}
}

1 則留言:

  1. // Get red pixels
    for (int y=0; yheight; y++) {
    uchar* ptr1=(uchar*) (pImg->imageData +y*pImg->widthStep);
    uchar* ptr2=(uchar*) (rImg->imageData +y*rImg->widthStep);
    for (int x=0; xwidth; x++) {
    ptr2[3*x]=0;
    ptr2[3*x+1]=0;
    ptr2[3*x+2]=ptr1[3*x]; <- 應該是ptr1[3*x + 2]
    }

    會把藍色的值丟到紅色放

    回覆刪除