ARGH!
First, I tried loading in a BMP and converting it and storing it as a PNG. It stored a PNG, but it was exactly the same size as the BMP! Not very efficient compression, huh?
Then I tried loading a JPG and storing it as a PNG, and that kept it the same exact size! I thought, a PNG as small as a JPG? No way! But I opened it, and it displays fine in Paint! So then I made it convert that file to a BMP, and it still kept it the same size as the original JPG! So now I knew something was wrong, but when I opened it in Paint, it still displayed!
When I tried to save, however, by default it wanted to save as a JPG, so I saved it as a different BMP file, and that made a new one that was much larger (like the size I'd expect the BMP to actually be). I opened that in Paint, and when I tried to save it, it said save as BMP format by default. But when I opened the other BMP that's the size of a JPG and tried to save, it said to save as JPG as default.
So my theory is that Paint is reading the file as whatever it seems to be, supposedly based on the header, rather than whatever the file type actually is! This is stupid, because any program that doesn't do that wouldn't even be compatible with these incorrectly converted files.
It also means that my method of conversion isn't actually compressing anything, but just copying data to a new file and renaming it with a new extension!
There's a class called ImageConverter in system.drawing, but I'm not sure if that's what I should use, or how to use it. The constructor expects a GUID, which I don't have.