Archive for July, 2008

S3 outage

Sunday, July 20th, 2008

Amazon S3, which is where we host most of our images, is having some problems at the moment. We’ve switched over to our backup systems, so things should be working fine. However, panoramas embedded in external sites may have some problems while the DNS updates. We should get everything back once Amazon has fixed the problem.
Update 0839 BST: S3 has been restored. We’re currently syncing our servers with them, so everything should be running smoothly soon. Thanks for your patience.

Resizing Actionscript images with bicubic or bilinear interpolation

Thursday, July 10th, 2008

I’ve had a few people contact me to ask about how to use clevrlib to resize images with bicubic or bilinear interpolation in Flash or Flex, so I’ll give an overview of how to do this.

The InterpolatedBitmapData class adds the methods getPixelBicubic and getPixelBilinear to the BitmapData class, which allows you to fetch the colour of a point that’s not on a pixel boundary. We use this when reprojecting the source images in the CleVR Stitcher, but it can work just as well for resizing an image. Bear in mind that bicubic is a lot slower than bilinear, and the quality improvement isn’t usually worthwhile. However, you’re welcome to switch to getPixelBicubic if you need to.

The basic method I’m using here for resizing is to loop through the pixels of the output image, getting the equivalent pixels in the source image. As these are found by multiplying by the ratio between the source and output sizes, the coordinates probably won’t be integers. Using regular getPixel would require rounding, and therefore give a jagged (aliased) output. The getPixelXxx methods let you pass them a Number, which needn’t be an integer, giving a much smoother result.

The sample code below shows a way of resizing an image using this method. The InterpolatedBitmapData should be created in the same way as a BitmapData, such as by draw()ing a loader onto it. The example I’ve shown below is an Event.COMPLETE handler for a Loader. Code below the cut.
(more…)