lower texture res

lets say I have a texture of size 1024x1024 and I want to lower that resolution to 256x256 at runtime. how would I go about doing that. Also what does GL_ARB_texture_compression really do. I have seen many tutorials but none really tell me why I should use it. Does it just save memory?

You could just scale the image during runtime (api specific) and reload it into the texture. Not sure what GL_ARB_texture_compression does either.