The $\ce{Fe}$-porphyrin complex is a vastly conjugated $\pi$-system, in which the oxidation state of the $\ce{Fe}$ plays a central role. The wavelength of light absorbed by hemoglobin exactly corresponds to the the difference in energy between the highest occupied molecular orbital (HOMO) and lowest unoccupied molecular orbital (LUMO) of the heme $\pi$-system, and is what gives hemoglobin its color. These values are exact and quantifiable. Changes in this color, therefore, are the direct result of changes in the energies of the molecular orbitals of the hemoglobin $\pi$-system.
To understand the color change, it is important to think about the geometry of the molecule. When oxygen is not bound, the iron atom is in the +2 oxidation state. It's slightly too big to fit into the hole in the center of the plane of the immediately-surrounding "heme," so it actually rests just on top of the heme plane. Here is the molecular orbital of the iron species with no $\ce{O2}$ bound:
When $\ce{O2}$ does bind, the $\ce{Fe}$ and $\ce{O2}$ orbitals bond and their energies change. In particular, the $\ce{O2}$ $\pi$* orbitals interact with the $\ce{Fe}$ $\mathrm{xz}$ and $\mathrm{z^2}$ orbitals. A side effect of the $\pi$* accepting properties of all three of these ligands is that iron formally changes from being in the +2 oxidation state to the +3 oxidation state. You can think of it as having "given up" one of its electrons to the ligand via the ligand's $\pi$* orbitals. As a side effect of losing one of its outer electrons, the iron atom is now small enough to align perfectly with heme plane.
Almost counterintuitively, however, formation of oxyhemoglobin is actually energetically disfavorable, which can be explained by its color. Deoxyhemoglobin appears purplish-blue, meaning that it must be absorbing yellow light (lower energy),and is therefore more stable. Oxyhemoglobin appears red, meaning that it must be absorbing at blue-green light (higher energy) and is therefore less stable. This is actually vital to oxyhemoglobin's functionality. Because it is a higher energy, and thereby less stable structure, it easily releases the bound oxygen in the presence of hypoxic cells.
[Source]