保持在图像的边界?

时间:2010-04-19 20:44:57

标签: c++

所以我循环遍历copyFrom.pixelData并将其复制到pixelData。

我意识到我需要检查i和j的条件,并让它们不要复制到pixelData [x] [y]的边界,

我需要另外2个循环吗?我试过这个,但是得到了分段错误..  这是正确的方法吗?

void Image::insert(int xoff, int yoff, const Image& copyFrom, Color notCopy)
{
    for (int x = xoff; x < xoff+copyFrom.width; x++) {
        for (int y = yoff; y < yoff+copyFrom.height; y++) {
            for (int i = 0; i<width; i++) {
                for (int j = 0; j<height; j++) {
                    if (copyFrom.pixelData[i][j].colorDistance(notCopy) > 20)
                        pixelData[x][y]=copyFrom.pixelData[i][j];
                    }
                }
            }
        }
    }
}

1 个答案:

答案 0 :(得分:1)

不,你不需要更多的循环。

而是尝试:

int copywidth = std::min(width, copyFrom.width-xoff);
// likewise copyheight = ...
for( int x = 0; x < copywidth; x++ ) {
  // likewise for( int y ...
    pixelData[x][y] = copyFrom.pixelData[x+xoff][y+yoff];
}