;; -*- mode: common-lisp; package: user -*-
(in-package :user)
;; This is Unix/Linux ppm format, which supports color pixmap images in ASCII. The
;; ppmtogif program will convert a ppm stream to a gif file, which is understood by most
;; browsers.
(defmacro with-ppm-writing ((stream writer padder
&key width height)
&body body)
(let ((gstream (gensym)))
`(let ((,gstream ,stream))
(multiple-value-bind (,writer ,padder)
(write-ppm-header ,gstream ,width ,height)
,@body))))
(defun write-ppm-header (stream width height)
(format stream "P3 ~d ~d 255~%" width height)
(values
(lambda (stream rgbi)
(format stream "~d ~d ~d~%"
(rgbi-red rgbi) (rgbi-green rgbi) (rgbi-blue rgbi)))
(lambda (stream)
(declare (ignore stream))
nil)))