56 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Factor
		
	
	
		
			Executable File
		
	
			
		
		
	
	
			56 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Factor
		
	
	
		
			Executable File
		
	
| ! Copyright (C) 2009 Joe Groff, Slava Pestov.
 | |
| ! See http://factorcode.org/license.txt for BSD license.
 | |
| USING: alien.c-types kernel combinators sequences
 | |
| math windows.gdi32 windows.types images destructors
 | |
| accessors fry locals classes.struct ;
 | |
| IN: windows.offscreen
 | |
| 
 | |
| : (bitmap-info) ( dim -- BITMAPINFO )
 | |
|     [
 | |
|         BITMAPINFO <struct>
 | |
|         dup bmiHeader>>
 | |
|         BITMAPINFOHEADER heap-size >>biSize
 | |
|     ] dip
 | |
|         [ first >>biWidth ]
 | |
|         [ second >>biHeight ]
 | |
|         [ first2 * 4 * >>biSizeImage ] tri
 | |
|         1 >>biPlanes
 | |
|         32 >>biBitCount
 | |
|         BI_RGB >>biCompression
 | |
|         72 >>biXPelsPerMeter
 | |
|         72 >>biYPelsPerMeter
 | |
|         0 >>biClrUsed
 | |
|         0 >>biClrImportant
 | |
|         drop ;
 | |
| 
 | |
| : make-bitmap ( dim dc -- hBitmap bits )
 | |
|     [ nip ]
 | |
|     [
 | |
|         swap (bitmap-info) DIB_RGB_COLORS f <void*>
 | |
|         [ f 0 CreateDIBSection ] keep *void*
 | |
|     ] 2bi
 | |
|     [ [ SelectObject drop ] keep ] dip ;
 | |
| 
 | |
| : make-offscreen-dc-and-bitmap ( dim -- dc hBitmap bits )
 | |
|     [ f CreateCompatibleDC ] dip over make-bitmap ;
 | |
| 
 | |
| : bitmap>byte-array ( bits dim -- byte-array )
 | |
|     product 4 * memory>byte-array ;
 | |
| 
 | |
| : bitmap>image ( bits dim -- image )
 | |
|     [ bitmap>byte-array ] keep
 | |
|     <image>
 | |
|         swap >>dim
 | |
|         swap >>bitmap
 | |
|         BGRX >>component-order
 | |
|         ubyte-components >>component-type
 | |
|         t >>upside-down? ;
 | |
| 
 | |
| : with-memory-dc ( quot: ( hDC -- ) -- )
 | |
|     [ [ f CreateCompatibleDC &DeleteDC ] dip call ] with-destructors ; inline
 | |
| 
 | |
| :: make-bitmap-image ( dim dc quot -- image )
 | |
|     dim dc make-bitmap [ &DeleteObject drop ] dip
 | |
|     quot dip
 | |
|     dim bitmap>image ; inline
 |