Tuesday, May 29, 2012

The 256MB device difference which isn't documented

The 7.1.1 SDK update allows us to support and detect devices with only 256MB and there are a few noted points of things to avoid on the 256-MB devices. Recently I've discovered another one.

32Bit image support!

256-MB  images only support displaying images at 16 Bits Per Pixel.

For most cases this isn't a problem, but if you're using gradients it may be.

Let me demonstrate with a simple app.
The app just shows an image with a gradient (from red to cyan) and an indication of if we're running in the regular emulator (with 512MB of memory) or the version with 256MB.

Here's what it looks like by default on the 512-MB emulator.


You'll notice the banding of the color in the gradient.
The standard way we'd adjust the app to cope with this would be to configure the app to use 32bits per pixel-which is enough to show the full range of colors in the gradient.

From WMAppManifest.xml:
<App BitsPerPixel="32"


There. Much better. No banding.

But what if we flip over to the other emulator the problem returns.


Oh no. The banding is back. And yes, we have still configured to use 32 BitsPerPixel

But, you may be thinking, perhaps this only affects the emulator.
No. I've tested this on a Nokia Lumia 610 (which is a 256MB device) and the same thing happens there.

So what can we do?

We can dither the image.


Voila. A lot less banding.

Now we can use a gradient image in an app on a 256MB device without banding.

The dithering in the above example was done with the tool from http://adtsai.blogspot.co.uk/2011/03/high-quality-dithering-for-windows.html


On the plus side we can use this same image on 512MB devices without the need for the memory overhead of using 32BPP.

On the negative side the dithered image is larger though.


Presumably, this lack of support for a higher number of bits per pixel, has been done to reduce the amount of memory needed to display graphics and therefore reduce the total memory used by the app.

If you're going to use gradients in your apps this is an important thing to be aware of.

4 comments:

  1. How can I tel whether my device is 256-MB or not? Should run a test or something? What type are Apple's iPhones?

    ReplyDelete
  2. @Thomas The only Windows Phone devices currently available with 256-MB are the Nokia Lumia 610 and the ZTE Orbit.

    If you're still not sure then try installing an app which isn't supported: http://allaboutwindowsphone.com/features/item/14920_What_apps_are_incompatible_wit.php

    This is all related to WP7, not iPhone.

    ReplyDelete
  3. Anonymous7:47 am

    Today I received another lack that I did not know about the WP7 256 MB. Cannot Manage the ScheduledActionService used to update live tiles for instance!

    ReplyDelete
  4. @mareinsula that is documented. See the big yellow Caution box at the top of http://msdn.microsoft.com/en-us/library/hh202942(v=vs.92).aspx

    ReplyDelete

I get a lot of comment spam :( - moderation may take a while.