void ofPixels_<PixelType>::cropTo(ofPixels_<PixelType> &toPix, int x, int y, int _width, int _height) const{ if (bAllocated){ if(&toPix == this){ toPix.crop(x,y,_width,_height); return; } _width = ofClamp(_width,1,getWidth()); _height = ofClamp(_height,1,getHeight()); if ((toPix.width != _width) || (toPix.height != _height) || (toPix.pixelFormat != pixelFormat)){ toPix.allocate(_width, _height, pixelFormat); } // this prevents having to do a check for bounds in the for loop; int minX = MAX(x, 0) * getNumChannels(); int maxX = MIN(x+_width, width) * getNumChannels(); int minY = MAX(y, 0); int maxY = MIN(y+_height, height); iterator newPixel = toPix.begin(); for(ConstLine line = getConstLines().begin()+minY; line!=getConstLines().begin()+maxY; ++line ){ for(const_iterator pixel = line.begin()+minX; pixel<line.begin()+maxX; ++pixel){ *newPixel++ = *pixel; } } } }
void ofPixels_<PixelType>::cropTo(ofPixels_<PixelType> &toPix, int x, int y, int _width, int _height) const{ if (bAllocated){ if(&toPix == this){ toPix.crop(x,y,_width,_height); return; } _width = ofClamp(_width,1,getWidth()); _height = ofClamp(_height,1,getHeight()); if ((toPix.width != _width) || (toPix.height != _height) || (toPix.pixelFormat != pixelFormat)){ toPix.allocate(_width, _height, pixelFormat); } // this prevents having to do a check for bounds in the for loop; int minX = MAX(x, 0); int maxX = MIN(x+_width, width); int minY = MAX(y, 0); int maxY = MIN(y+_height, height); auto newPixel = toPix.getPixelsIter().begin(); for(auto line: getConstLines(minY, maxY - minY)){ for(auto pixel: line.getPixels(minX, maxX - minX)){ newPixel++ = pixel; } } } }