<div dir="ltr"><div dir="ltr"><div>I've been tutoring a few kids aged 9-13 on the topic of computer programming for about two months and want to give a few of them a fun project to play with starting this Monday. So that would mean I need to write this project between now and then. I'd like to get some feedback on this project idea from you guys as I implement the final version, if your willing to give it consideration.</div><div><br></div><div>Education goal:</div><div><br></div><div>Give more concrete examples of how to write functions in Pascal and demonstrate that they can be both fun and useful. This will hopefully further increase students attention and interest in the area of computer programming.</div><div><br></div><div>Project description:</div><div><br></div><div>I will design a node based image manipulation program where users can place on a canvas using the mouse and interactively connect them together with source images and other node to generate a final image.</div><div><br></div><div>The program will pick up on the procedures a student writes and resulting in new node types becoming available in a toolbox. The user can then select that node and place it on a node canvas and connect the nodes together visually. Every node has a slider to mix the value it uses in a range from 0.0 to 1.0.</div><div><br></div><div>Nodes fall into two types, a manipulation node or combination node.</div><div><br></div><div>A manipulation node accepts a single source image and outputs changed pixels to one image. Manipulation nodes might do things like change image brightness, saturation, creating a negative image, or converting the image to a mosaic and so on.</div><div><br></div><div>A combination node accepts two source images and outputs changed pixels to one image. Combination nodes might include multiplying the pixels of two images, alpha blending two images, doing a screen blend of two images. Essentially combination nodes act like layers in image editing programs like Photoshop or Gimp.<br></div><div><br></div><div>From the perspective of the student he is writing Pascal functions that look like the following:</div><div><br></div><div>procedure BlackOrWhite(var Pixel: TPixel; Mix: Single; var Done: Boolean);</div><div>var</div><div>  B: Byte;</div><div>begin</div><div>  if Pixel.Red + Pixel.Green + Pixel.Blue > Mix * High(Byte) * 3 then</div><div>    B := High(Byte)</div><div>  else</div><div>    B := Low(Byte);</div><div>  Pixel.Red := B;<br></div><div>  Pixel.Green := B;<br></div><div><div>  Pixel.Blue := B;<br></div></div><div>end;<br></div><div><br></div><div>This then shows up in the user interface as an manipulation node named "Black or White" and is available in the toolbox. The user can then place the node on the node canvas and hook its input up to either a picture node or another node, and route its output either to the display node or another node. The user can drag the slider value effecting the mix value of the node.</div><div><br></div><div>Multiple node types can be programmed to create varying image effects and multiple nodes can be combined on the node canvas to change what images and what node effects are applied along with mixing values to generate output for the display node.</div><div><br></div><div>There are of course a few other features such as global X Y coordinates and image size that is available to the node procedures. They can also use multiple passes to generate node effects that require information from neighboring pixels.</div><div><br></div><div>Does anyone are to provide feedback on my project idea for students? Thank you for considering what I've written.</div></div></div>