From c10c5f5736b64e76421333742e1a4b58d779455e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Lindqvist?= Date: Tue, 7 Oct 2014 17:33:30 +0200 Subject: [PATCH] images: move rowstride to the images vocab because it will be used by gdi too --- basis/images/images-docs.factor | 6 +++++ basis/images/images-tests.factor | 37 +++++++++++++++++------------- basis/images/images.factor | 12 ++++++---- basis/images/loader/gtk/gtk.factor | 8 +------ 4 files changed, 35 insertions(+), 28 deletions(-) create mode 100644 basis/images/images-docs.factor diff --git a/basis/images/images-docs.factor b/basis/images/images-docs.factor new file mode 100644 index 0000000000..236c3d978a --- /dev/null +++ b/basis/images/images-docs.factor @@ -0,0 +1,6 @@ +USING: help.markup help.syntax math ; +IN: images + +HELP: rowstride +{ $values { "image" image } { "n" integer } } +{ $description "Returns an images rowstride metric." } ; diff --git a/basis/images/images-tests.factor b/basis/images/images-tests.factor index 1fda9b3b81..0c647c6208 100644 --- a/basis/images/images-tests.factor +++ b/basis/images/images-tests.factor @@ -4,26 +4,31 @@ USING: images tools.test kernel accessors ; IN: images.tests [ B{ 57 57 57 255 } ] [ 1 1 T{ image f { 2 3 } RGBA ubyte-components f f B{ - 0 0 0 0 - 0 0 0 0 - 0 0 0 0 + 0 0 0 0 + 0 0 0 0 + 0 0 0 0 57 57 57 255 - 0 0 0 0 - 0 0 0 0 + 0 0 0 0 + 0 0 0 0 } } pixel-at ] unit-test [ B{ - 0 0 0 0 - 0 0 0 0 - 0 0 0 0 + 0 0 0 0 + 0 0 0 0 + 0 0 0 0 57 57 57 255 - 0 0 0 0 - 0 0 0 0 + 0 0 0 0 + 0 0 0 0 } ] [ B{ 57 57 57 255 } 1 1 T{ image f { 2 3 } RGBA ubyte-components f f B{ - 0 0 0 0 - 0 0 0 0 - 0 0 0 0 - 0 0 0 0 - 0 0 0 0 - 0 0 0 0 + 0 0 0 0 + 0 0 0 0 + 0 0 0 0 + 0 0 0 0 + 0 0 0 0 + 0 0 0 0 } } [ set-pixel-at ] keep bitmap>> ] unit-test + +{ 40 30 } [ + T{ image f { 10 3 } RGBA ubyte-components f f } rowstride + T{ image f { 10 3 } RGB ubyte-components f f } rowstride +] unit-test diff --git a/basis/images/images.factor b/basis/images/images.factor index 2d90faf9ad..ae608dd80f 100644 --- a/basis/images/images.factor +++ b/basis/images/images.factor @@ -18,7 +18,7 @@ SINGLETONS: u-9-9-9-e5-components float-11-11-10-components ; -UNION: component-order +UNION: component-order A L LA BGR RGB BGRA RGBA ABGR ARGB RGBX XRGB BGRX XBGR INTENSITY DEPTH DEPTH-STENCIL R RG ; @@ -41,8 +41,8 @@ UNION: unnormalized-integer-components int-integer-components uint-integer-components ; UNION: signed-unnormalized-integer-components - byte-integer-components - short-integer-components + byte-integer-components + short-integer-components int-integer-components ; UNION: unsigned-unnormalized-integer-components @@ -131,10 +131,13 @@ TUPLE: image : bytes-per-pixel ( image -- n ) [ component-order>> ] [ component-type>> ] bi (bytes-per-pixel) ; - + : bytes-per-image ( image -- n ) [ dim>> product ] [ bytes-per-pixel ] bi * ; +: rowstride ( image -- n ) + [ dim>> first ] [ bytes-per-pixel ] bi * ; + : set-pixel-at ( pixel x y image -- ) [ 1 ] dip set-pixel-row-at ; inline - diff --git a/basis/images/loader/gtk/gtk.factor b/basis/images/loader/gtk/gtk.factor index 80cff3331c..3e020f1875 100644 --- a/basis/images/loader/gtk/gtk.factor +++ b/basis/images/loader/gtk/gtk.factor @@ -60,18 +60,12 @@ CONSTANT: bits>components { f >>premultiplied-alpha? f >>upside-down? ; -: bits-per-sample ( image -- bits ) - component-type>> bits>components value-at ; - -: rowstride ( image -- rowstride ) - [ dim>> first ] [ bits-per-sample 8 / ] [ has-alpha? 4 3 ? ] tri * * ; - : image>GdkPixbuf ( image -- GdkPixbuf ) { [ bitmap>> ] [ drop GDK_COLORSPACE_RGB ] [ has-alpha? ] - [ bits-per-sample ] + [ bytes-per-component 8 * ] [ dim>> first2 ] [ rowstride ] } cleave f f gdk_pixbuf_new_from_data ;