Image noise: Difference between revisions
Content added Content deleted
(→{{header|Factor}}: Sync from https://github.com/factor/factor/tree/master/extra/rosetta-code/image-noise) |
|||
Line 962: | Line 962: | ||
=={{header|Factor}}== |
=={{header|Factor}}== |
||
{{improve|Factor|Attempted to cleanup code, please review :)}} |
|||
~ |
~150 FPS |
||
<lang factor>USING: accessors calendar images images.viewer kernel math |
<lang factor>USING: accessors calendar images images.viewer kernel math |
||
math.parser models models.arrow random sequences threads timers |
math.parser models models.arrow random sequences threads timers |
||
ui.gadgets ui.gadgets.labels ui.gadgets.packs ; |
ui ui.gadgets ui.gadgets.labels ui.gadgets.packs ; |
||
IN: |
IN: rosetta-code.image-noise |
||
: bits>pixels ( bits -- bits' pixels ) |
|||
[ -1 shift ] [ 1 bitand ] bi 255 * ; inline |
|||
: ?generate-more-bits ( a bits -- a bits' ) |
|||
over 32 mod zero? [ drop random-32 ] when ; inline |
|||
: <random-images-bytes> ( dim -- bytes ) |
: <random-images-bytes> ( dim -- bytes ) |
||
[ 0 0 ] dip product [ |
|||
?generate-more-bits |
|||
[ 1 + ] [ bits>pixels ] bi* |
|||
] B{ } replicate-as 2nip ; |
|||
: <random-bw-image> ( -- image ) |
: <random-bw-image> ( -- image ) |
||
<image> |
|||
{ 320 240 } [ >>dim ] [ <random-images-bytes> >>bitmap ] bi |
{ 320 240 } [ >>dim ] [ <random-images-bytes> >>bitmap ] bi |
||
L >>component-order |
|||
ubyte-components >>component-type ; |
ubyte-components >>component-type ; |
||
TUPLE: bw-noise-gadget < image-control timers cnt old-cnt fps-model ; |
TUPLE: bw-noise-gadget < image-control timers cnt old-cnt fps-model ; |
||
: animate-image ( control -- ) |
: animate-image ( control -- ) |
||
[ 1 + ] change-cnt |
[ 1 + ] change-cnt |
||
model>> <random-bw-image> swap set-model ; |
model>> <random-bw-image> swap set-model ; |
||
: update-cnt ( gadget -- ) |
: update-cnt ( gadget -- ) |
||
[ cnt>> ] [ old-cnt<< ] bi ; |
[ cnt>> ] [ old-cnt<< ] bi ; |
||
: fps ( gadget -- fps ) |
: fps ( gadget -- fps ) |
||
[ cnt>> ] [ old-cnt>> ] bi - ; |
[ cnt>> ] [ old-cnt>> ] bi - ; |
||
: fps-monitor ( gadget -- ) |
: fps-monitor ( gadget -- ) |
||
[ fps ] [ update-cnt ] [ fps-model>> set-model ] tri ; |
[ fps ] [ update-cnt ] [ fps-model>> set-model ] tri ; |
||
: start-animation ( gadget -- ) |
: start-animation ( gadget -- ) |
||
[ [ animate-image ] curry 1 nanoseconds every ] [ timers>> push ] bi ; |
[ [ animate-image ] curry 1 nanoseconds every ] [ timers>> push ] bi ; |
||
: start-fps ( gadget -- ) |
: start-fps ( gadget -- ) |
||
[ [ fps-monitor ] curry 1 seconds every ] [ timers>> push ] bi ; |
[ [ fps-monitor ] curry 1 seconds every ] [ timers>> push ] bi ; |
||
: setup-timers ( gadget -- ) |
: setup-timers ( gadget -- ) |
||
[ start-animation ] [ start-fps ] bi ; |
[ start-animation ] [ start-fps ] bi ; |
||
: stop-animation ( gadget -- ) |
: stop-animation ( gadget -- ) |
||
timers>> [ [ stop-timer ] each ] [ |
timers>> [ [ stop-timer ] each ] [ delete-all ] bi ; |
||
M: bw-noise-gadget graft* [ call-next-method ] [ setup-timers ] bi ; |
M: bw-noise-gadget graft* [ call-next-method ] [ setup-timers ] bi ; |
||
M: bw-noise-gadget ungraft* [ stop-animation ] [ call-next-method ] bi ; |
M: bw-noise-gadget ungraft* [ stop-animation ] [ call-next-method ] bi ; |
||
: <bw-noise-gadget> ( -- gadget ) |
: <bw-noise-gadget> ( -- gadget ) |
||
<random-bw-image> <model> bw-noise-gadget new-image-gadget* |
<random-bw-image> <model> bw-noise-gadget new-image-gadget* |
||
0 >>cnt 0 >>old-cnt 0 <model> >>fps-model V{ } clone >>timers ; |
0 >>cnt 0 >>old-cnt 0 <model> >>fps-model V{ } clone >>timers ; |
||
: fps-gadget ( model -- gadget ) |
: fps-gadget ( model -- gadget ) |
||
[ number>string ] <arrow> <label-control> |
[ number>string ] <arrow> <label-control> |
||
"FPS: " <label> |
"FPS: " <label> |
||
<shelf> swap add-gadget swap add-gadget ; |
<shelf> swap add-gadget swap add-gadget ; |
||
: with-fps ( gadget -- gadget' ) |
: with-fps ( gadget -- gadget' ) |
||
[ fps-model>> fps-gadget ] |
[ fps-model>> fps-gadget ] |
||
[ <pile> swap add-gadget swap add-gadget ] bi ; |
[ <pile> swap add-gadget swap add-gadget ] bi ; |
||
MAIN-WINDOW: open-noise-window |
|||
: open-noise-window ( -- ) [ <bw-noise-gadget> with-fps "Black and White noise" open-window ] with-ui ;</lang> |
|||
{ { title "Black and White noise" } } |
|||
<bw-noise-gadget> with-fps >>gadgets ;</lang> |
|||
=={{header|Go}}== |
=={{header|Go}}== |