Start by doing two things.
First, change your code slightly:
string fileSpec = string.Format(@".\Images\{0}\{1}.png", subfolderName, imageName);
Becomes:
string fileSpec = Path.Combine(@".\Images", subfolderName, imageName + ".png");
This removes any chances that your parameters already have trailing "\" characters which are messing up the resulting path.
Then use the debugger to look at exactly what string that generates - if should be identical to the manually entered string you show.
Second, consider using a better path specification: relative paths can get very confused if the conditions your code is running under change even slightly. If you are ever writing these files from within you application, then consider moving them to a "writable" folder:
Where should I store my data?[
^] should help.
If you don't write them, and these are readonly, then consider using
string fileSpec = Path.Combine(Application.StartupPath, @"Images", subfolderName, imageName + ".png");