| 
									
										
										
										
											2009-03-27 19:31:25 -04:00
										 |  |  | ! Copyright (C) 2009 Slava Pestov. | 
					
						
							|  |  |  | ! See http://factorcode.org/license.txt for BSD license. | 
					
						
							|  |  |  | USING: sequences kernel math grouping fry columns locals accessors | 
					
						
							| 
									
										
										
										
											2009-05-14 17:54:16 -04:00
										 |  |  | images math.vectors arrays ;
 | 
					
						
							| 
									
										
										
										
											2009-03-27 19:31:25 -04:00
										 |  |  | IN: images.tesselation | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : group-rows ( bitmap bitmap-dim -- rows )
 | 
					
						
							|  |  |  |     first <sliced-groups> ; inline
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : tesselate-rows ( bitmap-rows tess-dim -- bitmaps )
 | 
					
						
							|  |  |  |     second <sliced-groups> ; inline
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : tesselate-columns ( bitmap-rows tess-dim -- bitmaps )
 | 
					
						
							|  |  |  |     first '[ _ <sliced-groups> ] map flip ; inline
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : tesselate-bitmap ( bitmap bitmap-dim tess-dim -- bitmap-grid )
 | 
					
						
							|  |  |  |     [ group-rows ] dip
 | 
					
						
							|  |  |  |     [ tesselate-rows ] keep
 | 
					
						
							|  |  |  |     '[ _ tesselate-columns ] map ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : tile-width ( tile-bitmap original-image -- width )
 | 
					
						
							| 
									
										
										
										
											2009-06-22 12:20:54 -04:00
										 |  |  |     [ first length ] [ bytes-per-pixel ] bi* /i ;
 | 
					
						
							| 
									
										
										
										
											2009-03-27 19:31:25 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | : <tile-image> ( tile-bitmap original-image -- tile-image )
 | 
					
						
							|  |  |  |     clone
 | 
					
						
							|  |  |  |         swap
 | 
					
						
							|  |  |  |         [ concat >>bitmap ] | 
					
						
							|  |  |  |         [ [ over tile-width ] [ length ] bi 2array >>dim ] bi ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | :: tesselate ( image tess-dim -- image-grid )
 | 
					
						
							| 
									
										
										
										
											2009-06-22 12:20:54 -04:00
										 |  |  |     image bytes-per-pixel :> bpp | 
					
						
							| 
									
										
										
										
											2009-03-27 19:31:25 -04:00
										 |  |  |     image dim>> { bpp 1 } v* :> image-dim' | 
					
						
							|  |  |  |     tess-dim { bpp 1 } v* :> tess-dim' | 
					
						
							|  |  |  |     image bitmap>> image-dim' tess-dim' tesselate-bitmap | 
					
						
							| 
									
										
										
										
											2009-06-22 12:20:54 -04:00
										 |  |  |     [ [ image <tile-image> ] map ] map ;
 |