R, (削除) 125 111 (削除ここまで) 108 bytes
function(x,i,m=array(1:prod(x),x),n=rbind(m,m,m),o=cbind(n,n,n),p=which(m==i,T)+x-1)o[p[1]+0:2,p[2]+0:2][-5]
14 and 8 bytes golfed by @JayCe and @Mark.
Input is [w, h], i because R populates arrays column first.
Makes the array and then "triples" it row- and column-wise. Then locate i in the original array and find it's neighborhood. Output without i.
ngm
- 4.4k
- 9
- 29