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

Reply via email to