(Generalized) Feistel networks have to be neither balanced nor over bits (see, e.g., [1]), so you could conceivably devise a 'perfect' permutation for any particular resolution.
For example, with 320x200, you'd do something like (completely untested)
for (var i = 0; i < 8; i++) {
l = input / 320;
r = input % 320;
var nl = r;
var F = (r * 356357 + i * 1234567) % 200;
r = (l + F) % 200;
l = nl;
input = 200*l + r;
}
which is not exactly fast or anything, but covers your domain perfectly.