pywrap: input: Fix & constructor for GP_Event.
[gfxprim.git] / doc / general.txt
blob34bc888541ca3b57bfc0c2c84abd4ed1d68de8d3
1 General information
2 ===================
4 Gfxprim is simple modular 2D bitmap graphics library with emphasis on speed
5 and correctness.
7 One of the key points of the library is meta-programming. Most of the
8 operations and filters are wriiten in http://jinja.pocoo.org/[Jinja]
9 templating language that is used to generate specialized code in C
10 programmming language. Creating code that works with less usuall pixel types
11 should be as easy as adding pixel definition into the configuration and
12 rebuilding the library. Read more link:gen.html[here].
14 Core
15 ----
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:context.html[CP_Context] 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[GetPixel] and link:get_put_pixel.html[PutPixel] and
25 optimized code for writing continous line of pixels 'GP_WritePixels' that are
26 base for the more complex drawing primitives in GFX or for graphics operations
27 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
37 operation.
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.
48 Gfx
49 ---
51 link:drawing_api.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
54 started.
56 Text
57 ----
59 link:text_api.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).
64 Loaders
65 -------
67 link:loaders.html[Loaders] are part that is resposible for loading and saving
68 images into various standard formats (PNG, JPEG, GIF, BMP, PNM, etc...).
70 .Currently supported formats
71 [width="100%",options="header"]
72 |=============================================================================
73 | Extension | Format Name | Signature | Read Support | Write Support
75 | JPEG | | [green]*Yes* | [green]*Yes* | [green]*Yes*
77 | PNG |
78   Portable Network Graphics |
79   [green]*Yes* |
80   [green]#16 Bit RGB not supported# |
81   [green]#16 Bit RGB not supported#
83 | GIF |
84   Graphics Interchange Format |
85   [green]*Yes* |
86   [green]*Yes* |
87   [black]*No*
89 | BMP | |
90   [green]*Yes* |
91   [green]#RLE and RGB Bitfields not implemented# |
92   [black]*No*
94 | PSP |
95   Paint Shop Pro Image |
96   [green]*Yes* |
97   [green]#Composite image only for newer formats than 3.0# |
98   [black]*No*
100 | PBM PGM PNM |
101   Netpbm portable bitmap |
102   [black]*No* |
103   [gray]#Not finished# |
104   [gray]#Not finished#
106 |=============================================================================
109 Filters
110 -------
112 link:filters.html[Filters] are part of the library that implements bitmap
113 image filters.
115 .Currently Implemented Point Filters
116 [width="100%",options="header"]
117 |=============================================================================
118 | Filter Name | Supported Pixel Type | Multithreaded
119 | Brightness  | All                  | No
120 | Contrast    | All                  | No
121 |=============================================================================
123 .Currently Implemented Linear Filters
124 [width="100%",options="header"]
125 |=============================================================================
126 | Filter Name | Supported Pixel Type | Mutithreaded
127 | Convolution | RGB888               | Yes
128 | Separable Convolution | RGB888     | Yes
129 | Gaussian Blur | RGB888     | Yes
130 | Sobel Edge Detection | RGB888 | Yes
131 | Prewitt Edge Detection | RGB888 | Yes
132 |=============================================================================
134 NOTE: Linear filters are implemented using generic convolution filters, once
135       convolution is rewritten to run for all pixel types the rest of filters
136       will support them automatically.
139 .Currently Implemented Linear Filters
140 [width="100%",options="header"]
141 |=============================================================================
142 | Filter Name | Supported Pixel Type | Multithreaded
143 | Addition    | All                  | No
144 | Multiplication | All               | No
145 | Difference  | All                  | No
146 | Max, Min    | All                  | No
147 |=============================================================================
149 .Currently Implemented Ditherings
150 [width="100%",options="header"]
151 |=============================================================================
152 | Filter Name | Supported Pixel Type | Multithreaded
153 | Floyd Steinberg | RGB888 -> Any    | No
154 | Hilbert Peano | RGB888 -> Any    | No
155 |=============================================================================
157 .Currently Implemented Resamplings
158 [width="100%",options="header"]
159 |=============================================================================
160 | Filter Name | Supported Pixel Type | Multithreaded
161 | Nearest Neighbour | All           | No
162 | Bilinear (Integer Arithmetics) | RGB888 | No
163 | Bicubic (Integer Arithmetics) | All | No
164 | Bicubic (Float Arithmetics) | RGB888 | No
165 |=============================================================================
167 .Rotation and mirroring
168 [width="100%",options="header"]
169 |=============================================================================
170 | Filter Name | Supported Pixel Type | Multithreaded
171 | Rotate 90   | All                  | No
172 | Rotate 180  | All                  | No
173 | Rotate 270  | All                  | No
174 | Mirror Vertically | All            | No
175 | Mirror Horizontally | All          | No
176 |=============================================================================
178 .Misc filters
179 [width="100%",options="header"]
180 |=============================================================================
181 | Filter Name | Supported Pixel Type | Multithreaded
182 | Histogram   | All                  | No
183 | Additive Gaussian Noise | All      | No
184 | Median      | RGB888               | No
185 | Weighted Median | RGB888           | No
186 | Sigma Lee | RGB888                 | No
187 |=============================================================================
189 Backends
190 --------
192 link:backends.html[Backends] together with link:input.html[Input] are API for
193 drawing on screen (or into a window) and for getting keystrokes/mouse
194 coordinates. So far we support X11, linux framebuffer and SDL as a graphics
195 backend.
198 Work in progress
199 ----------------
201 * Python bindings
203 * Anti Aliased drawing
205 * Gamma correction and color profiles
207 * Alfa channel blits