Here's my solution. Change CompilationTarget -> "C"
to CompilationTarget -> "WVM"
if you don't have a C compiler available.
cf = Compile[{{v, _Real}, {kernel, _Real, 2}},
v*kernel,
RuntimeAttributes -> {Listable},
Parallelization -> True,
CompilationTarget -> "C",
RuntimeOptions -> "Speed"
];
shapedPixels[img_, kernel_] := With[{dim = ImageDimensions[img]},
ImageCrop[
Image[Join @@
Transpose[
Join @@@
Transpose[
cf[ImageData[
ImageResize[img,
Ceiling[dim/Reverse[Dimensions[kernel]]]]], kernel], {1,
2, 5, 4, 3}], {1, 3, 2, 4}]], dim]];
Manipulate[
shapedPixels[pic,
ArrayPad[If[invert, 1 - matrix[r], matrix[r]], padding]], {r, 1, 20,
1}, {padding, 0, 10,
1}, {matrix, {DiskMatrix, DiamondMatrix, BoxMatrix, IdentityMatrix,
CrossMatrix}}, {{invert, False}, {True, False}}]
