Rename GP_Context -> GP_Pixmap
[gfxprim.git] / doc / about.txt
blob96f3652b7238779b562d7ba97ccec87b6adfe548
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 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+.
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: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
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: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
54 started.
56 Text
57 ----
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).
64 [[Loaders]]
65 Loaders
66 -------
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*
78 | PNG |
79   Portable Network Graphics |
80   [green]#16 Bit RGB not supported# |
81   [green]#16 Bit RGB not supported#
83 | GIF |
84   Graphics Interchange Format |
85   [green]*Yes* |
86   [black]*No*
88 | BMP | |
89   [green]#RLE4 and some less common bitfiels not supported# |
90   [green]#RGB888 only#
92 | TIFF |
93   Tagged Image File Format |
94   [green]#Most of the Palette, RGB and Grayscale works (no tiles yet)# |
95   [green]#RGB888 and Grayscale#
97 | PSP |
98   Paint Shop Pro Image |
99   [green]#Composite image only for newer formats than 3.0# |
100   [black]*No*
102 | PSD |
103   Adobe Photoshop Image |
104   [green]#Thumbnail or Merged image (16 bit RGB and CMYK not supported yet)#|
105   [black]*No*
107 | PBM PGM PPM PNM |
108   Netpbm portable bitmap |
109   [green]#All but < 8bit binary grayscale# |
110   [green]#All ASCII formats#
112 | JP2 |
113   JPEG 2000 |
114   [green]#Experimental support for RGB images# |
115   [black]*No*
117 | PCX |
118   ZSoft PCX |
119   [green]*Yes* |
120   [black]*No*
122 | CBZ |
123   Comic book archive |
124   [green]#Experimental support via ZIP Container# |
125   [black]*No*
127 |=============================================================================
130 Filters
131 -------
133 link:filters.html[Filters] are part of the library that implements bitmap
134 image filters.
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 |=============================================================================
196 .Misc filters
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 |=============================================================================
207 Backends
208 --------
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
213 graphics backend.
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.
218 Python bindings
219 ---------------
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].
226 Work in progress
227 ----------------
229 * Anti Aliased drawing
231 * Gamma correction and color profiles