[bknr-cvs] hans changed trunk/projects/quickhoney/src/

BKNR Commits bknr at bknr.net
Sun Dec 21 21:04:33 UTC 2008


Revision: 4149
Author: hans
URL: http://bknr.net/trac/changeset/4149

Interface to store images, add function to convert all pixel images.

U   trunk/projects/quickhoney/src/image.lisp
U   trunk/projects/quickhoney/src/packages.lisp
U   trunk/projects/quickhoney/src/pixel-pdf.lisp

Modified: trunk/projects/quickhoney/src/image.lisp
===================================================================
--- trunk/projects/quickhoney/src/image.lisp	2008-12-21 14:07:37 UTC (rev 4148)
+++ trunk/projects/quickhoney/src/image.lisp	2008-12-21 21:04:33 UTC (rev 4149)
@@ -57,3 +57,14 @@
 (defmethod destroy-object :before ((image quickhoney-animation-image))
   (delete-object (quickhoney-animation-image-animation image)))
 
+(defun convert-all-pixel-images (directory)
+  (dolist (category (remove :pixel (quickhoney::all-categories) :test-not #'eql :key #'car))
+    (dolist (image (quickhoney:images-in-category category))
+      (format t "; image ~A~%" image)
+      (handler-case
+          (pixel-pdf:convert-store-image-to-pdf image
+                                                (make-pathname :name (store-image-name image)
+                                                               :type "pdf"
+                                                               :defaults directory))
+        (error (e)
+          (format t "; error ~A~%" e))))))
\ No newline at end of file

Modified: trunk/projects/quickhoney/src/packages.lisp
===================================================================
--- trunk/projects/quickhoney/src/packages.lisp	2008-12-21 14:07:37 UTC (rev 4148)
+++ trunk/projects/quickhoney/src/packages.lisp	2008-12-21 21:04:33 UTC (rev 4149)
@@ -91,7 +91,8 @@
 
 (defpackage :pixel-pdf
   (:use :cl)
-  (:export #:convert))
+  (:export #:convert-image-file-to-pdf
+           #:convert-store-image-to-pdf))
 
 (defpackage :turtle
   (:use :cl)

Modified: trunk/projects/quickhoney/src/pixel-pdf.lisp
===================================================================
--- trunk/projects/quickhoney/src/pixel-pdf.lisp	2008-12-21 14:07:37 UTC (rev 4148)
+++ trunk/projects/quickhoney/src/pixel-pdf.lisp	2008-12-21 21:04:33 UTC (rev 4149)
@@ -17,6 +17,10 @@
    (looking-in-direction :initform :east
                          :accessor looking-in-direction)))
 
+(defmacro with-converter ((&rest args) &body body)
+  `(let ((*converter* (apply #'make-instance 'converter ,args)))
+     , at body))
+
 (defun width (converter)
   (array-dimension (pixels converter) 0))
 
@@ -43,17 +47,17 @@
                        (ldb (byte 8 0) retval) (cl-gd::gd-image-get-blue img raw-pixel))
                  retval))))))
 
-(defmethod initialize-instance :after ((converter converter) &key image-pathname)
-  (cl-gd:with-image-from-file* (image-pathname)
-    (let ((width (cl-gd:image-width))
-          (height (cl-gd:image-height)))
-      (with-slots (seen pixels) converter
-        (setf seen (make-array (list width height)
-                               :element-type 'boolean :initial-element nil)
-              pixels (make-array (list width height)))
-        (cl-gd:do-rows (y)
-          (cl-gd:do-pixels-in-row (x)
-            (setf (aref pixels x y) (convert-color converter (cl-gd:raw-pixel)))))))))
+(defmethod initialize-instance :after ((converter converter) &key)
+  (let ((width (cl-gd:image-width))
+        (height (cl-gd:image-height)))
+    (with-slots (seen pixels) converter
+      (setf seen (make-array (list width height)
+                             :element-type 'boolean :initial-element nil)
+            pixels (make-array (list width height)))
+      (cl-gd:do-rows (y)
+        (cl-gd:do-pixels-in-row (x)
+          (setf (aref pixels x y) (convert-color converter (cl-gd:raw-pixel)))))))
+  (turtle:reset))
 
 (defun in-range (x y)
   (and (< -1 x (width *converter*))
@@ -135,6 +139,8 @@
         (y *converter*) y))
 
 (defun flood-fill ()
+  ;; This function certainly is stack hungry.  If needed, increase the
+  ;; stack size of the Lisp runtime (SBCL: --control-stack-size 64)
   (labels
       ((maybe-descend (x y)
          (when (and (same-color x y)
@@ -179,9 +185,8 @@
        (turtle:forward))))
   (turtle:pen-up))
 
-(defun pixels-pdf (image-pathname)
-  (let ((*converter* (make-instance 'converter :image-pathname image-pathname)))
-    (turtle:reset)
+(defun convert-pixels-to-pdf (pdf-pathname)
+  (with-converter ()
     (pdf:with-document ()
       (let ((bounds (if (> (width *converter*)
                            (height *converter*))
@@ -209,15 +214,25 @@
                 (pdf:set-font (pdf:get-font "Helvetica") 7.0)
                 (pdf:set-rgb-fill 0.5 0.5 0.5)
                 (pdf:translate (+ border x-offset 3 (* scale (width *converter*)))
-                               125.5)
+                               (+ y-offset 125.5))
                 (pdf:rotate -90.0)
-                (pdf:show-text (format nil "~C Nana Rausch QuickHoney" #\Copyright_Sign)))))))
-      (pdf:write-document (make-pathname :type "pdf" :defaults image-pathname)))))
+                (pdf:show-text (format nil "~C Nana Rausch QuickHoney" #\Copyright_Sign))))))
+        (pdf:write-document pdf-pathname)))))
 
+(defun convert-image-file-to-pdf (image-pathname
+                                  &optional (pdf-pathname (make-pathname :type "pdf" :defaults image-pathname)))
+  (cl-gd:with-image-from-file* (image-pathname)
+    (convert-pixels-to-pdf pdf-pathname)))
+
+(defun convert-store-image-to-pdf (store-image pdf-pathname)
+  (bknr.images:with-store-image* (store-image)
+    (convert-pixels-to-pdf pdf-pathname)))
+
 (defun print-seen ()
   (dotimes (y (height *converter*))
     (dotimes (x (width *converter*))
       (write-char (if (seen x (- (height *converter*) y 1))
                       #\* #\.)
                   *error-output*))
-    (terpri *error-output*)))
\ No newline at end of file
+    (terpri *error-output*)))
+





More information about the Bknr-cvs mailing list