Hi Jakub, On Thu, 05 Apr 2012 01:59:48 +0200 noob7 <noob7@xxxxxxxxxxxxxx> wrote: > Hello, > My name is Jakub Ozga. Iam 3rd year student on Gdansk University of Technology in Poland. I study computer science. I like to apply for Gegl porting project. I have already worked on 2 projects wich involved computer vision techniques supported by opencv library. Feel free to look at project site: http://sart2.eti.pg.gda.pl/en/index.php?language=en. I suggest to look at project and stuff sections. > > Code Review and Algorithmic Description of GIMP Plug-ins > Thanks for your enthusiasm, but I don't understand why you've written the text (and code) below? Were they quoted from the project description? Good luck in being accepted into Google Summer of Code, and I hope you will stay involved in GIMP development afterwards. Regards, Shlomi Fish > Each Gimp plugin have functions: > a)run > Prepares parameters for mainfunction. Here dialog and mainfunction are called. > b)query > Creates array with type, name and description for each parameter. Then Installs procedure in procedure database, > with given array. > c)mainfunction > Here everything is done. > d)dialog > Creates window to set preferences for mainfunction. > e)optional preview > Function that is optional depends on plugin. Shows preview image. > #cubism > 2. Get background color. > 3. Fill image with background color. > 4. Calculate number of tiles on Image. > 5. Create array with length equals number of tiles. Put index value to each element. > Randomize array by random picking 2 elemnts and swaping them. > 6. Run loop with stop at value of tile number. In Loop use above array, randomize functions, tile size > and saturation to calculate position for points, rotation angle and translation vector. > 7. Create polygon within 4 calculated points. Rotate it by calculated angle. Translate polygon by vector. > 8. Modify x and y values with CLAMP if needed. > 9. Get color from modified(or not) x and y position from original Image. > #fill_poly_color(run with x,y above and retrived color) > 10. Pick first two points from Polygon. Calculate distance between them and get x, y vectors(normalized) for them. > 11. Find maximum x,y and minimum x,y withing all points of Polygon. Get maximum width and height of Polygon. > 12. Do scanline pattern for Polygon by height(rows). > 13. Convert segments depending on min and max values of scanlines and cordinates of first Polygon point. > 14. Calculate the color for each pixel of Polygon depending on scanlines and other various calculations. > #sinus > 1. Create parameters: > a) Set blending which depends on colorization. > b) Create 3 objects, each contains random values like int, double and angle. > c) Do tiling to those 3 objects. Then move them to parameters. > d) Get 2 colors which were perviously defined. Modify those colors and do color2 - color1 with substracting rgba values. > e) Multiply color2 and set color2 to parameters. > 2. Get starting point and ending point of rectangle which represent the user selection. > 3. Depending on bits per pixel retrived from original image run computing block for each destination region. > 4. Assign color to each pixel for region using parameters, sinus and blending power. > #decompose > 1. Get the type of image(RGB,HUE...). Types are defined at the top of the source. > 2. Check if source image contains atleast 3 bits per pixel and if source image have alpha channel. > 3. Define number of new gray images. This number equals specified number which is defined for each image type. Note that > this number cannot exceed maximum number of layers generated by extraction( #define MAX_EXTRACT_IMAGES) > 5. Creating images in loop. Image creation includes creating new image with type(BaseType = GIMP_GRAY), filename, resolution and layer. > 6. For each soruce pixel region extract channel information and modify channels. > 7. Update each Layer(Emit signal) and add alpha channel to each Layer. > 8. return number of new images created. > #gaussian-blur > 1. Run iir or rle blur functions which depends on configuration and depends also on the blur radius (bug). > Each method uses 2 steps to achieve results: Divide process on 2 passes: vertical and horizontal. > @IIR > 2. Calculate vertical standard deviation. > 3. Find Gaussian constants using standard deviation. > 4. If image has alfa(ex. rgb, gray) then transform alpha channel. > 5. Set up 2 initial arrays for color. > 6. Do the gaussian calculations using source image, above arrays and constants. > 7. If image has alfa then convert alfa channel from premultiplied to separate one. > 8. Do steps 2-7 with diffrent orientation. > @RLE > 2. Calculate vertical standard deviation. > 3. Fill gauss curve using standard deviation. > 4. Do the same steps as iire except step 6 which here its diffrent: > -If a lot of pixels are repeated then run fastest algorithm for this case > else run slower one but easier to understand. > > Sample implementation > diff --git a/examples/hi.c b/examples/hi.c > index e69de29..e26d04a 100644 > --- a/examples/hi.c > +++ b/examples/hi.c > @@ -0,0 +1,37 @@ > +#include <gegl.h> > +#include <glib/gprintf.h> > + > +gint main (gint argc, gchar **argv) > +{ > + g_thread_init (NULL); > + gegl_init (&argc, &argv); > + > + if(argc!=2){ > + g_print("Please provide filename with png format!\n"); > + return -1; > + } > + GeglNode *gegl = gegl_node_new (); > + GeglNode *over = gegl_node_new_child (gegl, "operation", "gegl:over", NULL); > + GeglNode *load = gegl_node_new_child (gegl, "operation", "gegl:png-load", "path", argv[1], NULL); > + GeglNode *text = gegl_node_new_child (gegl, "operation", "gegl:text", "size", 10.0, "color", gegl_color_new ("rgb(1.0,1.0,1.0)"), NULL); > + GeglNode *display = gegl_node_create_child (gegl, "gegl:display"); > + GeglRectangle rect = gegl_node_get_bounding_box(load); > + GeglBuffer* buffer = gegl_buffer_new(&rect,babl_format ("RGBA float")); > + > + gegl_buffer_save(buffer, "newBuffer", &rect); > + gegl_node_link_many (load, over, display, NULL); > + gegl_node_connect_to (text, "output", over, "aux"); > + > + int i=0; > + for(;i<100;i++){ > + gchar string[512]; > + g_sprintf (string, "%d",i); > + gegl_node_set (text, "string", string, NULL); > + gegl_node_process (display); > + } > + > + g_object_unref (gegl); > + gegl_exit (); > + > + return 0; > +} -- ----------------------------------------------------------------- Shlomi Fish http://www.shlomifish.org/ "Humanity" - Parody of Modern Life - http://shlom.in/humanity Failure is not an option! It’s bundled with the product. — Cipher-0 in Freenode’s #perl Please reply to list if it's a mailing list post - http://shlom.in/reply . _______________________________________________ gimp-developer-list mailing list gimp-developer-list@xxxxxxxxx http://mail.gnome.org/mailman/listinfo/gimp-developer-list