From 325b59c59ade2a09f2b788f26801bb3f8d8a0d5e Mon Sep 17 00:00:00 2001 From: Zachary Pincus Date: Fri, 22 Oct 2010 15:32:15 -0400 Subject: [PATCH] palette support for saving 8-bit greyscale images --- scikits/image/io/_plugins/freeimage_plugin.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/scikits/image/io/_plugins/freeimage_plugin.py b/scikits/image/io/_plugins/freeimage_plugin.py index a8c99e5..bf2a334 100644 --- a/scikits/image/io/_plugins/freeimage_plugin.py +++ b/scikits/image/io/_plugins/freeimage_plugin.py @@ -389,6 +389,9 @@ def write_multipage(arrays, filename, flags=0): finally: _FI.FreeImage_CloseMultiBitmap(multibitmap, flags) +# 4-byte quads of 0,v,v,v from 0,0,0,0 to 0,255,255,255 +_GREY_PALETTE = numpy.arange(0, 0x01000000, 0x00010101, dtype=numpy.uint32) + def _array_to_bitmap(array): """Allocate a FreeImage bitmap and copy a numpy array into it. @@ -429,7 +432,11 @@ def n(arr): # normalise to freeimage's in-memory format wrapped_array[3] = n(array[:,:,3]) else: wrapped_array[:] = n(array) - + if len(shape) == 2 and dtype.type == numpy.uint8: + palette = _FI.FreeImage_GetPalette(bitmap) + if not palette: + raise RuntimeError('Could not get image palette') + ctypes.memmove(palette, _GREY_PALETTE.ctypes.data, 1024) return bitmap, fi_type except: _FI.FreeImage_Unload(bitmap)