Sounds like a hardware issue. I would take it in to get checked.
Just FYI on why it "works" on white: Each pixel on the screen has a red, green, and blue element. These three light up with various levels of intensity to form all the colors you see (so purple would be high red and blue, and little to no green, for example). To display black, none light up. To display white, they all light up. So, if your reds are stuck "on," white will appear normal when the blue and green light up to match.