A couple of days ago, I was watching this small Silverlight vs. Flash: Stray Sheep sample and perceived something strange in the rendering. If you pay attention to the Silverlight implementation you'll notice that the sheep gets blurry in one of the frames. So, as many of my clients asked me a lot of times about this issue with bitmaps in Silverlight and WPF applications, I'll try to explain the technology concept behind this "undesired" side-effect of device rendering.
Let's start from the very beginning, when computers had small resolutions and every pixel was important for representation. In those times, most of the graphics created where completely dependant on the screen resolution. Bitmaps where used everywhere and, obviously, had a fixed width and height in pixels. Using this method, a resolution like 640x480 could be used to represent a simple star (A) with clear notion of the pixel space used. The problem with this dependence on pixels is that if the star is shown on a bigger display (supposedly with higher resolution) it'll keep using the same amount of pixels, so it will be perceived much smaller (B) by the user.
The way industry solved the problem was releasing the rendering engine from the screen resolution, so the terms Pixel-Independent, Resolution-Independent and Device-Independent were born. What this method propose is that instead of storing graphics in bitmaps, it's better storing them without pixel related information to allow better scaling at higher resolutions: an implementation vectors. Using vectors, coordinates and relative sizes, the previous star can take as many pixels as needed to be drawn the same size on small and large resolutions (C) without paying attention to the pixels used.
Everything is quite smooth, both in Silverlight and WPF, when using vector graphics and fonts - but problems appear when using JPEG or PNG raster graphics. The problem is, obviously, related to the pixel-dependant information of the graphic format. It cannot be represent accurately in pixel-independent devices. In this kind of devices, the rendering engine is projecting the image in a virtual plane that is finally scaled into the screen resolution applying an anti-aliasing effect to improve the overall quality. It doesn't really matter if the image used is exactly the size of the targeted screen resolution, it would pass through this projection process and it will be smoothed.
Although some times is good to use graphics in your applications it's much better, in terms of visual quality, to make use of vector graphics. I'm aware that sometimes it's not possible (mostly, due to the lack of blending effects) but, at least, don't use graphics on interaction elements like texts, buttons or similar objects where the blurry effect can really decrease the user experience.
References: