[Openmcl-devel] Fwd: CCL Image I/O

Ron Garret ron at awun.net
Tue Jun 3 14:04:05 PDT 2008


Just realized this produces JPGs, not TIFFs.  If you really need TIFFs  
I think you just need to do:

(defun image2tiff (img) (#/TIFFRepresentation img))

but I haven't actually tried this.  In any case, the following doc  
pages might be helpful:

http://developer.apple.com/documentation/Cocoa/Reference/ApplicationKit/Classes/NSImage_Class/Reference/Reference.html#/ 
/apple_ref/occ/instm/NSImage/TIFFRepresentation

http://developer.apple.com/documentation/Cocoa/Reference/ApplicationKit/Classes/NSBitmapImageRep_Class/Reference/Reference.html#/ 
/apple_ref/occ/instm/NSBitmapImageRep/TIFFRepresentation

rg

On Jun 3, 2008, at 1:48 PM, Ron Garret wrote:

> Try this:
>
> ;;; Binding Block
> (defmacro bb (&rest body)
>   (cond
>    ((null (rst body)) (fst body))
>    ((consp (1st body))
>     `(progn ,(1st body) (bb ,@(rst body))))
>    ((not (symbolp (1st body)))
>     (error "~S is not a valid variable name" (1st body)))
>    ((eq (1st body) ':mv)
>     (if (symbolp (2nd body))
>       `(let ((,(2nd body) (multiple-value-list ,(3rd body))))
>          (bb ,@(rrrst body)))
>       `(multiple-value-bind ,(2nd body) ,(3rd body)
>          (bb ,@(rrrst body)))))
>    ((eq (1st body) :db)
>     `(destructuring-bind ,(2nd body) ,(3rd body)
>        (declare (special ,@(find-specials (2nd body))))
>        (bb ,@(rrrst body))))
>    ; BUG: 1-arg assumption fails for with-slots
>    ((eq (1st body) :with)
>     `(,(intern (format nil "WITH-~A" (2nd body)) (symbol-package  
> (2nd body)))
>       ,(3rd body) (bb ,@(rrrst body))))
>    ((keywordp (1st body))
>     (error "~S is not a valid binding keyword" (1st body)))
>    (t `(let ((,(1st body) ,(2nd body)))
>          (declare (special ,@(find-specials (1st body))))
>          (bb ,@(rrst body))))))
>
> (defun image-from-url (url)
>   (#/initWithContentsOfURL: (#/alloc ns:ns-image)
>                             (#/URLWithString: ns:ns-url url)))
>
> (defun image-from-file (filename)
>   (#/initWithData: (#/alloc ns:ns-image)
>                    (#/dataWithContentsOfFile: ns:ns-data filename)))
>
> (defun image-bitmap (img)
>   (or
>    (loop
>      with e = (#/objectEnumerator (#/representations img))
>      as rep = (#/nextObject e)
>      until (%null-ptr-p rep)
>      if (typep rep ns:ns-bitmap-image-rep) return rep)
>    (bb
>     :with focused-image img
>     :db (x . y) (image-size img)
>     (#/initWithFocusedViewRect: (#/alloc ns:ns-bitmap-image-rep)
>                                 (ns:make-ns-rect 0 0 x y)))))
>
> (defun bitmap-pixels (rep)
>   (bb
>    :db (x . y) (image-size rep)
>    ptr (#/bitmapData rep)
>    bpr (#/bytesPerRow rep)  ; Could be padded
>    bpp (/ (#/bitsPerPixel rep) 8)
>    a (make-array (list y x bpp) :element-type '(unsigned-byte 8))
>    (dotimes (i x a)
>      (dotimes (j y)
>        (dotimes (k bpp)
>          (setf (aref a j i k) (%get-byte ptr (+ (* i bpp) (* j bpr)  
> k))))))))
>
> (defun image-pixels (img) (bitmap-pixels (image-bitmap img)))
>
> (defun image2jpeg (img &optional (compression 0.9))
>   (#/representationUsingType:properties:
>    (image-bitmap img)
>    #$NSJPEGFileType
>    (#/dictionaryWithObject:forKey: ns:ns-dictionary
>                                    (#/numberWithFloat: ns:ns-number  
> compression)
>                                    #&NSImageCompressionFactor)))
>
> On Jun 3, 2008, at 12:59 PM, Andrew Shalit wrote:
>
>> Anyone have time to put the following CCL utility together for  
>> Russell Kirsch (http://home.comcast.net/~rakirsch/)?
>>
>>
>> Begin forwarded message:
>>
>>> From: "Russell A. Kirsch" <rakirsch at acm.org>
>>> ...
>>> Please tell me how to do the following:
>>> 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.
>>>
>>> Russell
>>>
>> _______________________________________________
>> Openmcl-devel mailing list
>> Openmcl-devel at clozure.com
>> http://clozure.com/mailman/listinfo/openmcl-devel
>
> _______________________________________________
> Openmcl-devel mailing list
> Openmcl-devel at clozure.com
> http://clozure.com/mailman/listinfo/openmcl-devel




More information about the Openmcl-devel mailing list