<html><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; ">Try this:<div><br></div><div><div>;;; Binding Block</div><div>(defmacro bb (&amp;rest body)</div><div>&nbsp;&nbsp;(cond</div><div>&nbsp;&nbsp; ((null (rst body)) (fst body))</div><div>&nbsp;&nbsp; ((consp (1st body))</div><div>&nbsp;&nbsp; &nbsp;`(progn ,(1st body) (bb ,@(rst body))))</div><div>&nbsp;&nbsp; ((not (symbolp (1st body)))</div><div>&nbsp;&nbsp; &nbsp;(error "~S is not a valid variable name" (1st body)))</div><div>&nbsp;&nbsp; ((eq (1st body) ':mv)</div><div>&nbsp;&nbsp; &nbsp;(if (symbolp (2nd body))</div><div>&nbsp;&nbsp; &nbsp; &nbsp;`(let ((,(2nd body) (multiple-value-list ,(3rd body))))</div><div>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; (bb ,@(rrrst body)))</div><div>&nbsp;&nbsp; &nbsp; &nbsp;`(multiple-value-bind ,(2nd body) ,(3rd body)</div><div>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; (bb ,@(rrrst body)))))</div><div>&nbsp;&nbsp; ((eq (1st body) :db)</div><div>&nbsp;&nbsp; &nbsp;`(destructuring-bind ,(2nd body) ,(3rd body)</div><div>&nbsp;&nbsp; &nbsp; &nbsp; (declare (special ,@(find-specials (2nd body))))</div><div>&nbsp;&nbsp; &nbsp; &nbsp; (bb ,@(rrrst body))))</div><div>&nbsp;&nbsp; ; BUG: 1-arg assumption fails for with-slots</div><div>&nbsp;&nbsp; ((eq (1st body) :with)</div><div>&nbsp;&nbsp; &nbsp;`(,(intern (format nil "WITH-~A" (2nd body)) (symbol-package (2nd body)))</div><div>&nbsp;&nbsp; &nbsp; &nbsp;,(3rd body) (bb ,@(rrrst body))))</div><div>&nbsp;&nbsp; ((keywordp (1st body))</div><div>&nbsp;&nbsp; &nbsp;(error "~S is not a valid binding keyword" (1st body)))</div><div>&nbsp;&nbsp; (t `(let ((,(1st body) ,(2nd body)))</div><div>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; (declare (special ,@(find-specials (1st body))))</div><div>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; (bb ,@(rrst body))))))</div></div><div><br></div><div><div>(defun image-from-url (url)</div><div>&nbsp;&nbsp;(#/initWithContentsOfURL: (#/alloc ns:ns-image)</div><div>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;(#/URLWithString: ns:ns-url url)))</div><div><br></div><div>(defun image-from-file (filename)</div><div>&nbsp;&nbsp;(#/initWithData: (#/alloc ns:ns-image)</div><div>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; (#/dataWithContentsOfFile: ns:ns-data filename)))</div><div><br></div><div>(defun image-bitmap (img)</div><div>&nbsp;&nbsp;(or</div><div>&nbsp;&nbsp; (loop</div><div>&nbsp;&nbsp; &nbsp; with e = (#/objectEnumerator (#/representations img))</div><div>&nbsp;&nbsp; &nbsp; as rep = (#/nextObject e)</div><div>&nbsp;&nbsp; &nbsp; until (%null-ptr-p rep)</div><div>&nbsp;&nbsp; &nbsp; if (typep rep ns:ns-bitmap-image-rep) return rep)</div><div>&nbsp;&nbsp; (bb</div><div>&nbsp;&nbsp; &nbsp;:with focused-image img</div><div>&nbsp;&nbsp; &nbsp;:db (x . y) (image-size img)</div><div>&nbsp;&nbsp; &nbsp;(#/initWithFocusedViewRect: (#/alloc ns:ns-bitmap-image-rep)</div><div>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;(ns:make-ns-rect 0 0 x y)))))</div><div><br></div><div>(defun bitmap-pixels (rep)</div><div>&nbsp;&nbsp;(bb</div><div>&nbsp;&nbsp; :db (x . y) (image-size rep)</div><div>&nbsp;&nbsp; ptr (#/bitmapData rep)</div><div>&nbsp;&nbsp; bpr (#/bytesPerRow rep) &nbsp;; Could be padded</div><div>&nbsp;&nbsp; bpp (/ (#/bitsPerPixel rep) 8)</div><div>&nbsp;&nbsp; a (make-array (list y x bpp) :element-type '(unsigned-byte 8))</div><div>&nbsp;&nbsp; (dotimes (i x a)</div><div>&nbsp;&nbsp; &nbsp; (dotimes (j y)</div><div>&nbsp;&nbsp; &nbsp; &nbsp; (dotimes (k bpp)</div><div>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; (setf (aref a j i k) (%get-byte ptr (+ (* i bpp) (* j bpr) k))))))))</div><div><br></div><div>(defun image-pixels (img) (bitmap-pixels (image-bitmap img)))</div><div><br></div><div>(defun image2jpeg (img &amp;optional (compression 0.9))</div><div>&nbsp;&nbsp;(#/representationUsingType:properties:</div><div>&nbsp;&nbsp; (image-bitmap img)</div><div>&nbsp;&nbsp; #$NSJPEGFileType</div><div>&nbsp;&nbsp; (#/dictionaryWithObject:forKey: ns:ns-dictionary</div><div>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; (#/numberWithFloat: ns:ns-number compression)</div><div>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #&amp;NSImageCompressionFactor)))</div><div><br></div><div><div>On Jun 3, 2008, at 12:59 PM, Andrew Shalit wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; ">Anyone have time to put the following CCL utility together for Russell Kirsch (<a href="http://home.comcast.net/~rakirsch/)?">http://home.comcast.net/~rakirsch/)?</a><br><br><div><br><div>Begin forwarded message:</div><br class="Apple-interchange-newline"><blockquote type="cite"><div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><font face="Helvetica" size="3" color="#000000" style="font: 12.0px Helvetica; color: #000000"><b>From: </b></font><font face="Helvetica" size="3" style="font: 12.0px Helvetica">"Russell A. Kirsch" &lt;<a href="mailto:rakirsch@acm.org">rakirsch@acm.org</a>></font></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><font class="Apple-style-span" color="#000000"><b>...</b></font></div> </div><div>Please tell me how to do the following:<br>Read an image file (Tiff or Pict) from disk into a 2 dimensional array in CCL and then Output a processed two dimensional array to a Tiff or Pict file on the disk. In the CCL documentation I can only find description of one dimensional vector input.<br><br>Russell<br><br></div></blockquote></div></div>_______________________________________________<br>Openmcl-devel mailing list<br><a href="mailto:Openmcl-devel@clozure.com">Openmcl-devel@clozure.com</a><br>http://clozure.com/mailman/listinfo/openmcl-devel<br></blockquote></div><br></div></body></html>