I keep having to figure out how to export pixel-perfect raster images from Mathematica, which I use for test images with my software. I found that it’s simpler to use ArrayPlot than Raster now, so I’m documenting this for my future use (and any one else’s).
Here’s a simple image function that generates a grid of black pixels alternating with nearly-transparent red pixels. I use this sort of image to ensure that I’m sampling correctly.
imageFunction[x_, y_] := If[BitAnd[x, 1] == BitAnd[y, 1], {0, 0, 0, 1}, {1, 0, 0, 0.01}]
Table then makes a 256 x 128 array of RGBA values from the image function. This is non-square for this example to ensure that the width and height are in the right order later.
imageData = Table[ imageFunction[x, y], {y, 0, 127}, {x, 0, 255}];
ArrayPlot makes the pixel array viewable by converting it into a Graphics. The ColorFunction produces RGBA pixels (the default ignores alpha), PixelConstrained aligns the image to exact pixel boundaries, and ImageSize produces a result that’s exactly the right size.
apic = ArrayPlot[ imageData, ColorFunction -> RGBColor, PixelConstrained -> True, ImageSize -> Reverse[Take[Dimensions[imageData], 2]]]
This produces the image:
Which is then exported like this:
Export["~/Desktop/APic.tif", apic];
The result is a pixel-perfect file resulting from a raster image defined in Mathematica.
Comments
One response to “Exporting Pixel-Perfect Graphics in Mathematica”
[…] 7 introduces a new Image function that eliminates all the hassle previously necessary to create and export pixel-perfect raster images. Instead of using ArrayPlot to generate the image, […]