I managed to get the picture to display by changing the height and width of the picture. Now it works. However, the colours of the other shapes on the window all turned into black colour. Do I have to call glDisable(GL_TEXTURE_2D);. If yes, where do I call it?
Can you post a link to the image you're trying to display? It doesn't just look like the image is blurry, it looks like you're reading from the wrong offset and using the wrong image pitch, to have what looks like alternating pixel rows side-by-side, and not starting at the upper-left of the image.
Are you trying to display this on a 2d quad stuck to the screen, or, in 3d? Im assuming 2d because you are using gluOrtho. Its going to be blurry to some degree if the pixels dont map 1 to 1 with the quad.
Use the following to stop the image from repeating, unless repeating is what you want then use GL_REPEAT