编写一个名为 imageMap 的函数,其类型如下:imageMap(img: Image, func: (img: Image, x: number, y: number) => Pixel): Image结果必须是与 img 尺寸相同的新图像。新图像中每个像素的值,应该是将 func 应用于 img 的每个像素的结果。您的函数将使用 lib220.createImage 或 image.copy 来创建新图像,或制作原始图像的副本。请注意,lib220.createImage 的 fillColor 参数需要是像素值。右图显示了使用 imageMap 函数的示例输出,如下所示:let url = 'https://people.cs.umass.edu/~joydeepb/robot.jpg';let robot = lib220.loadImageFromURL(url);imageMap(robot, function(img, x, y) { const c = img.getPixel(x, y); return [c[0], 0, 0];}).show();我确切地知道我的任务要求什么,但我不知道如何处理一个有参数的函数。(我没有上传图片,因为我认为它没有必要。)
2 回答
![?](http://img1.sycdn.imooc.com/545862db00017f3402200220-100-100.jpg)
一只斗牛犬
TA贡献1784条经验 获得超2个赞
这是起点:
function imageMap(img, func) {
// in here, make one or more calls to func. For example:
const pixel5_5 = func(img, 5, 5);
}
显然,仅使用 5,5 调用 func 并不能解决问题,但这是您如何与传入的函数进行交互的示例。
![?](http://img1.sycdn.imooc.com/54584f850001c0bc02200220-100-100.jpg)
扬帆大鱼
TA贡献1799条经验 获得超9个赞
只需检查一下:
function do2and3(operation) {
console.log(operation(2, 3));
}
do2and3((x, y) => x + y); // Add
do2and3((x, y) => x - y); // Reduct
do2and3((x, y) => x * y); // Multiply
do2and3((x, y) => x / y); // Divide
do2and3(function(x, y) { // A more complex example
console.log(x);
console.log(y);
return Math.pow(x, y);
})
将函数作为参数传递允许主函数像调用普通函数一样调用它,这使您能够扩展某些东西而无需修改它。
这样做的好处是您可以将功能“注入”到现有函数中而无需更改它。
添加回答
举报
0/150
提交
取消