One way could be to obfuscate the bytes of images. This means deliberately mixing up the bytes and then have your game SWF load the bytes, refix them and display output.
Since the images are only viewable when your SWF app "fixes" them during runtime, anyone just getting the image file via URL ends up with a corrupt image. Now the only way to fix is to know exactly what your game code is doing to those bytes to make them displayable.
Very Basic Example :
Write a program that given a file's bytes will take 10 bytes & reverse order them, keep next 10 bytes normal (ie: skip them), reverse order the next 10 and skip next 10 and etc etc. Save the image to server. Now your SWF is programmed to know to reverse-order every 10 bytes (making already reversed back to normal order), skip 10 and and so on. It does this after loading said image bytes. Instead of the usual load bytes, decode format and show pixels
(which would fail), it should instead load bytes, fix the messed-up bytes, then decode and show pixels.
The opening first 10 bytes of a PNG look like this :
89 50 4E 47 0D 0A 1A 0A 00 00
but if you reverse them they look as 00 00 0A 1A 0A 0D 47 4E 50 89
. Now try to open a PNG file with those (reversed) first 10 bytes and every program will tell you this is an invalid image. Content thief is left frustrated.
That alone might help you but some may figure it out if they know PNG bytes. It would be clever to vary which amount of bytes get obfuscated and how often, thus the pattern is not easily obvious.