4 GFXprim is simple modular 2D bitmap graphics library with emphasis on speed
7 One of the key points of the library are code generators. Most of the
8 graphics operations are written using https://github.com/metan-ucw/cct[CCT]
9 templating engine which is used to create specialized C code. So,
10 for an example, once you add pixel definition into configuration file,
11 creating specialized filters, loaders and conversions to other pixel
12 formats is just a matter of typing +make rebuild+.
17 Core of the library contains minimal amount of code to define interface that
18 is shared between all parts of the library.
20 The most important part of the core is link:pixmap.html[GP_Pixmap] structure
21 that represents in-memory pixmap.
23 The Core also contains generated code for basic operations such as
24 link:get_put_pixel.html[GP_GetPixel] and link:get_put_pixel.html[GP_PutPixel]
25 and optimized functions for writing continous line of pixels 'GP_WritePixels'
26 that are base for the more complex drawing primitives in GFX or for graphics
27 operations in Filters.
29 link:blits.html[Blits] are functions used to copy part of one bitmap into
30 another bitmap. The blits be also used for primitive bitmap pixel type
31 conversions (i.e. RGB888 vs BGR888).
33 link:progress_callback.html[Progress Callback] is an interface that allows you
34 to monitor progress of an operation it is mainly used in loaders and filters.
35 Generally any operation that is not really quick takes optional pointer to
36 progress callback that allows your program to monitor and possibly abort the
39 link:debug.html[Debug] interface is used as unified facility to print debug
40 messages, control debug level, etc.
42 There is also support for link:gamma.html[Gamma] correction. Unfortunatelly
43 not all parts of library use it at the moment.
45 And last but not least Core is a home for some link:core.html[common macros]
46 that are used from different parts of the library.
51 link:gfx.html[Gfx] is part of the library that implements basic
52 graphics primitives such as lines, circles, polygons, etc. Clasicall
53 primitives are nearly finished. Work on anti aliased primitives has been
59 link:text.html[Text] part of the library implements basic support for
60 printing text into the bitmap. There are two bitmap fonts compiled directly
61 into the library and we support True Type fonts through
62 link:http://freetype.org[FreeType] (so far ASCII printable characters only).
68 link:loaders.html[Loaders] are part that is resposible for loading and saving
69 images into various standard formats (PNG, JPEG, GIF, TIFF, BMP, PNM, etc...).
71 .Currently supported formats
72 [width="100%",options="header"]
73 |=============================================================================
74 | Extension | Format Name | Read Support | Write Support
76 | JPEG | | [green]*Yes* | [green]*Yes*
79 Portable Network Graphics |
80 [green]#16 Bit RGB not supported# |
81 [green]#16 Bit RGB not supported#
84 Graphics Interchange Format |
89 [green]#RLE4 and some less common bitfiels not supported# |
93 Tagged Image File Format |
94 [green]#Most of the Palette, RGB and Grayscale works (no tiles yet)# |
95 [green]#RGB888 and Grayscale#
98 Paint Shop Pro Image |
99 [green]#Composite image only for newer formats than 3.0# |
103 Adobe Photoshop Image |
104 [green]#Thumbnail or Merged image (16 bit RGB and CMYK not supported yet)#|
108 Netpbm portable bitmap |
109 [green]#All but < 8bit binary grayscale# |
110 [green]#All ASCII formats#
114 [green]#Experimental support for RGB images# |
124 [green]#Experimental support via ZIP Container# |
127 |=============================================================================
133 link:filters.html[Filters] are part of the library that implements bitmap
136 .Currently Implemented Point Filters
137 [width="100%",options="header"]
138 |=============================================================================
139 | Filter Name | Supported Pixel Type | Multithreaded
140 | Brightness | All | Not Applicable
141 | Contrast | All | Not Applicable
142 | Invert | All | Not Applicable
143 | Posterize | All | Not Applicable
144 |=============================================================================
146 .Currently Implemented Linear Filters
147 [width="100%",options="header"]
148 |=============================================================================
149 | Filter Name | Supported Pixel Type | Mutithreaded
150 | Convolution | All | Yes
151 | Separable Convolution | All | Yes
152 | Gaussian Blur | All | Yes
153 | Sobel Edge Detection | RGB888 | Yes
154 | Prewitt Edge Detection | RGB888 | Yes
155 |=============================================================================
157 .Currently Implemented Aritmetic Filters
158 [width="100%",options="header"]
159 |=============================================================================
160 | Filter Name | Supported Pixel Type | Multithreaded
161 | Addition | All | No
162 | Multiplication | All | No
163 | Difference | All | No
164 | Max, Min | All | No
165 |=============================================================================
167 .Currently Implemented Ditherings
168 [width="100%",options="header"]
169 |=============================================================================
170 | Filter Name | Supported Pixel Type | Multithreaded
171 | Floyd Steinberg | All -> Any | No
172 | Hilbert Peano | All -> Any | No
173 |=============================================================================
175 .Currently Implemented Resamplings
176 [width="100%",options="header"]
177 |=============================================================================
178 | Filter Name | Supported Pixel Type | Multithreaded
179 | Nearest Neighbour | All | No
180 | Bilinear (Integer Arithmetics) | All | No
181 | Bicubic (Integer Arithmetics) | All | No
182 | Bicubic (Float Arithmetics) | RGB888 | No
183 |=============================================================================
185 .Rotation and mirroring
186 [width="100%",options="header"]
187 |=============================================================================
188 | Filter Name | Supported Pixel Type | Multithreaded
189 | Rotate 90 | All | No
190 | Rotate 180 | All | No
191 | Rotate 270 | All | No
192 | Mirror Vertically | All | No
193 | Mirror Horizontally | All | No
194 |=============================================================================
197 [width="100%",options="header"]
198 |=============================================================================
199 | Filter Name | Supported Pixel Type | Multithreaded
200 | Histogram | All | No
201 | Additive Gaussian Noise | All | No
202 | Median | RGB888 | No
203 | Weighted Median | RGB888 | No
204 | Sigma Lee | RGB888 | No
205 |=============================================================================
210 link:backends.html[Backends] together with link:input.html[Input] are API for
211 drawing on screen (or into a window) and for getting keystrokes/mouse
212 coordinates. So far we support X11, linux framebuffer, SDL and AALib as a
215 There is also a virtual backend used for testing that allows you to create a
216 backend of any pixel type on the top of other backends.
221 Python bindings currently covers most of the library, there is (work in
222 progress) documentation for link:core_python.html[Core],
223 link:gfx_python.html[Gfx], link:loaders_python.html[Loaders],
224 link:filters_python.html[Filters] and link:backends_python.html[Backends].
229 * Anti Aliased drawing
231 * Gamma correction and color profiles