X-Git-Url: http://git.kpe.io/?a=blobdiff_plain;f=cameras.lisp;h=9edbcd3615c20dba4789b6ad9143804007581a80;hb=refs%2Fheads%2Fmaster;hp=118f48aa76ddb39e09b34733af1d67a32ceeb341;hpb=e09bc807453600be922d5d35a90d87fd3e56abef;p=cl-photo.git diff --git a/cameras.lisp b/cameras.lisp index 118f48a..9edbcd3 100644 --- a/cameras.lisp +++ b/cameras.lisp @@ -28,12 +28,12 @@ (eval-when (:compile-toplevel :load-toplevel :execute) (defun make-output-format (w h &key (units :inches)) (let ((name (format nil "~Dx~D~A" w h - (ecase units - (:inches "in") - (:mm "mm") - (:cm "cm") - (:m "m") - (:feet "ft"))))) + (ecase units + (:inches "in") + (:mm "mm") + (:cm "cm") + (:m "m") + (:feet "ft"))))) (list :format (kmrcl:ensure-keyword name) :output (cons (length->mm w units) (length->mm h units)) :name name @@ -55,16 +55,20 @@ (:format :1d :make "Canon" :pixels (2464 . 1648) :imager (27 . 17.8) :name "1D") (:format :1dmkii :make "Canon" :pixels (3504 . 2336) :imager (28.7 . 19.1) :name "1D Mark II" :nicks (:1d2 :1dii :1dmkii)) + (:format :1dmkiii :make "Canon" :pixels (3888 . 2592) :imager (28.1 . 18.7) + :name "1D Mark III" :nicks (:1d3 :1diii :1dmkiii)) (:format :1ds :make "Canon" :pixels (4064 . 3328) :imager (36 . 24) :name "1Ds") (:format :1dsmkii :make "Canon" :pixels (4992 . 3328) :imager (36 . 24) :name "1Ds Mark II" :nicks (:1ds2 :1dsii)) + (:format :1dsmkiii :make "Canon" :pixels (5616 . 3744) :imager (36 . 24) + :name "1Ds Mark III" :nicks (:1ds3 :1dsiii)) (:format :g7 :make "Canon" :pixels (3648 . 2736) :imager (7.2 . 5.3) :name "PowerShot G7") (:format :ndigital :make "Contax" :pixels (3040 . 2008) :imager (36 . 24) :name "N Digital") (:format :s1pro :make "FujiFilm" :pixels (3040 . 2016) :imager (23 . 15.5) - :name "FinePix S1 Pro") + :name "FinePix S1 Pro") (:format :s2pro :make "FujiFilm" :pixels (4256 . 2848) :imager (23 . 15.5) :name "FinePix S2 Pro") (:format :s3pro :make "FujiFilm" :pixels (4256 . 2848) :imager (23 . 15.5) @@ -92,12 +96,15 @@ (:format :d1 :make "Nikon" :pixels (2000 . 1312) :imager (23.7 . 15.6) :name "D1") (:format :d1x :make "Nikon" :pixels (4028 . 1324) :imager (23.7 . 15.6) :name "D1X") (:format :d100 :make "Nikon" :pixels (3037 . 2024) :imager (23.7 . 15.6) :name "D100") + (:format :d200 :make "Nikon" :pixels (3872 . 2592) :imager (23.6 . 15.8) :name "D200") + (:format :d300 :make "Nikon" :pixels (4288 . 2848) :imager (23.6 . 15.8) :name "D300") (:format :d50 :make "Nikon" :pixels (3008 . 2000) :imager (23.7 . 15.6) :name "D50") (:format :d70 :make "Nikon" :pixels (3008 . 2000) :imager (23.7 . 15.6) :name "D70") (:format :d70s :make "Nikon" :pixels (3008 . 2000) :imager (23.7 . 15.6) :name "D70s") (:format :d2h :make "Nikon" :pixels (2464 . 1632) :imager (23.3 . 15.5) :name "D2H") (:format :d2hs :make "Nikon" :pixels (2464 . 1632) :imager (23.3 . 15.5) :name "D2Hs") (:format :d2x :make "Nikon" :pixels (4288 . 2848) :imager (23.7 . 15.6) :name "D2X") + (:format :d3 :make "Nikon" :pixels (4256 . 2832) :imager (36 . 23.9) :name "D3") (:format :cp5900 :make "Nikon" :pixels (2592 . 1944) :imager (7.18 . 5.32) :name "Coolpix 5900") (:format :cp7900 :make "Nikon" :pixels (3072 . 2304) :imager (7.18 . 5.32) :name "Coolpix 7900") @@ -116,13 +123,13 @@ (:format :1/1.8in :imager (7.18 . 5.32) :name "1/1.8\"") (:format :dx :imager (24 . 16) :name "DX") (:format :35mm :imager (36 . 24) :name "35mm") - + (:format :6x4.5cm :imager (60 . 45) :name "6x4.5cm" :nicks (:\645)) (:format :6x6cm :imager (60 . 60) :name "6x6cm" :nicks (:6x6)) (:format :6x7cm :imager (60 . 70) :name "6x7cm" :nicks (:6x7)) (:format :6x9cm :imager (60 . 90) :name "6x9cm" :nicks (:6x9)) (:format :6x12cm :imager (60 . 120) :name "6x12cm" :nicks (:6x12)) - + #.(make-output-format 4 5) #.(make-output-format 5 7) #.(make-output-format 8 10) @@ -139,47 +146,47 @@ )) (defun sort-formats (formats) - (sort formats - (lambda (a b) - (block nil - (cond - ((and (null (getf a :make)) (getf b :make)) - (return nil)) - ((and (getf a :make) (null (getf b :make))) - (return t)) - ((string-lessp (getf a :make) (getf b :make)) - (return t)) - ((string-greaterp (getf a :make) (getf b :make)) - (return nil))) - (when (and (getf a :name) (getf b :name)) - (cond - ((string-lessp (getf a :name) (getf b :name)) - (return t)) - ((string-greaterp (getf a :name) (getf b :name)) - (return nil)))))))) + (sort formats + (lambda (a b) + (block nil + (cond + ((and (null (getf a :make)) (getf b :make)) + (return nil)) + ((and (getf a :make) (null (getf b :make))) + (return t)) + ((string-lessp (getf a :make) (getf b :make)) + (return t)) + ((string-greaterp (getf a :make) (getf b :make)) + (return nil))) + (when (and (getf a :name) (getf b :name)) + (cond + ((string-lessp (getf a :name) (getf b :name)) + (return t)) + ((string-greaterp (getf a :name) (getf b :name)) + (return nil)))))))) (defvar *digital-cameras* (sort-formats (loop for format in +format-db+ - when (getf format :pixels) - collect format))) + when (getf format :pixels) + collect format))) (defvar *cameras* (sort-formats (loop for format in +format-db+ - when (getf format :imager) - collect format))) - + when (getf format :imager) + collect format))) + (defun format-match-p (format-spec format) (let ((key (ensure-keyword format-spec))) (when (or (eql key (getf format :format)) - (member key (getf format :nicks))) + (member key (getf format :nicks))) t))) (defun find-format (format-spec) (find format-spec +format-db+ :test 'format-match-p)) (defun pixel-dimensions (sensor-spec &key (format :35mm)) - "Returns the number of pixels for a format. + "Returns the number of pixels for a format. CAMERA-SPEC is either a keyword designating the camera or the number of megapixels of the sensor. FORMAT should be defined if the CAMERA-SPEC is the number of megapixels @@ -194,13 +201,13 @@ so the proper aspect ratio is used." "Returns the imager dimensions in mm of a FORMAT." (getf (find-format format-spec) :imager)) -(defun pixel-size (format-spec) +(defun pixel-size (format-spec) "Return pixel size in micrometers." (let ((pixel-dim (pixel-dimensions format-spec)) - (imager-dim (imager-dimensions format-spec))) + (imager-dim (imager-dimensions format-spec))) (when (and pixel-dim imager-dim) (values (* 1000 (/ (car imager-dim) (car pixel-dim))) - (* 1000 (/ (cdr imager-dim) (cdr pixel-dim))))))) + (* 1000 (/ (cdr imager-dim) (cdr pixel-dim))))))) (defun output-dimensions (format-spec) "Returns the output dimensions in mm of a FORMAT."