Ketil Malde wrote: > I discovered that although XPM accepts values in the range 0x00..0xff, > it is still monochrome. XGM (plain, that is, not raw) is > approximately the same format, but displays the way I wanted. So I > ended up using: > > mkpgm :: Array (Int,Int) Int -> String > mkpgm cm = header ++ "\n" ++ image > where header = unwords ["P2",show width,show heigth,show maxval]
This may not work for many programs which read PGM files. The header is usually split into multiple lines, e.g. P2 256 256 255 Some programs may accept arbitrary whitespace between tokens, but others may insist upon newlines, e.g.: mkpgm cm = header ++ image where header = unlines $ map unwords [["P2"],[show width, show height],[show maxval]] Also: > (width,heigth) = snd $ bounds cm This assumes that "fst $ bounds cm == (1,1)". > Not *very* beautiful, but seems to do the job for my stuff. I'll try > the PPM library if I need something a tad more fancy - like colors :-) Writing PPM is only marginally more complex, e.g.: mkppm :: Array (Int,Int) (Int, Int, Int) -> String mkppm cm = header ++ image where header = unlines $ map unwords [["P3"],[show width, show height],[show maxval]] image = unlines $ map showRGB $ elems cm width = x1 - x0 + 1 height = y1 - y0 + 1 ((x0,y0),(x1,y1)) = bounds cm maxval = maximum $ concatMap unRGB (elems cm) showRGB (r,g,b) = unwords [show r, show g, show b] unRGB (r,g,b) = [r,g,b] -- Glynn Clements <[EMAIL PROTECTED]> _______________________________________________ Haskell mailing list [EMAIL PROTECTED] http://www.haskell.org/mailman/listinfo/haskell