Skip to content

sadleremy/color-array-series

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

23 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

color-array-series

This is a stand-alone Java Application that may be used to generate images. Images are generated in real-time using a user-configurable set of color combiners and filters.

Execute by running main class ColorArrayGenerationUI. Also packaged as a runnable JAR.

Feature set

Draw directly to canvas

Using "Ink color selection", you can enter in any HTML color code (sans "#") and update your active ink color. Then, if you click and drag your cursor over the canvas, it will draw that color to the nearest edges of the color grid and immediately regenerate the image with your changes.

Color combiner selection

Using the "Color combiner selection" section, you can choose any combination of color combiners, and adjust the applied multiplier. When you select multiple combine methods, each point in the grid is generated by randomly choosing one of the combiners.

Available combiners:

RGB_AVG

Sets the RGB values of the generated color to the average of the respective parents' RGB values. Does not use the multiplier value.

RGB_SUM_MOD

Do you like Sierpinski triangles? This is the color combiner for you! Try it out to see what I mean.

Sets the RGB values of the generated color to the modulus of the sum of the respective parents' RGB values. The modulo is determined by scaling the multiplier from [0, 100] to [0, 255].

For example, with a multiplier value of 10, the modulo is floor((10 * 255)/100) = 25.

Thus, with parent colors (r, g, b): p1 = (r1, g1, b1) and p2 = (r2, g2, b2),

the generated color is equal to: ((r1 + r2) % 25, (g1 + g2) % 25, (b1 + b2) % 25)

RGB_SCALE_AVG

Sets the RGB values of the generated color to a scaled average of the respective parents' RGB values. Multiplier affects the degree to which the value average is scaled up or down. A multiplier of 50 is equivalent to the RGB_AVG output.

NOISY_AVG

Sets the RGB values of the generated color to the average of the respective parents' RGB values, with added noise. The degree of noise added or subtracted from each RGB value is proportional to the multiplier value.

RGB_CHOOSER

Sets each respective RGB value of the generated color to one randomly chosen from the parents. Does not use the multiplier value, however changing the multiplier triggers a recalculation of the random choices.

Filter selection

Using the "Filter selection" section, you can choose any combination of filters, and adjust the applied intensity. When you select multiple filters, each point in the grid is filtered by randomly choosing one of the filters.

Available filters:

NONE

In this modern age, I think most of us know what it means to have #nofilter.

BINARY

At full intensity, produces a binary version of the image. Does this by averaging all RGB values at a given point and mapping it to the nearest absolute color value (0 or 255). This is similar to contrast.

RGB_ABSOLUTES

At full intensity, rounds each of the RGB values of a position to the nearest absolute value (0 or 255). This is similar to saturation.

Re-initialize

You can re-initialize the canvas edges using the active set of color combiners. By default, the edges of the canvas are initialized using the RGB_AVG combiner, and when you make adjustments to combiners, the canvas edges are not affected. Telling the canvas to re-initialize will recalculate the canvas contents as well as the edges.

Save Capture

Saves the current image to PNG file. Creates a "color-array-out" directory in the same directory as the program is running, and saves the capture to a sub-directory with a UUID name.

Save Clips

Iterates over all possible combiner multipliers, and for each value, saves the canvas to PNG file. Creates a "color-array-out" directory in the same directory as the program is running, and saves the captures to a sub-directory with a UUID name. Each capture is saved as capture-(multiplier).PNG.

Future work for this project

Near term

  • Save capture/clips improvements
    • Name your own captures before saving
    • Choosing file-types
    • Improved visual feedback of status when saving captures and clips
    • Save clips saves to animated GIF
  • Revamped "Ink color selection" section
  • Saving & loading canvas states to/from JSON -> preserve your favorite configurations!
  • More combiners and filters
  • Process analysis & deeper optimization, to support larger canvases better

Long term

  • Support arbitrary graphs for creating parent/child color relationships, instead of the hard-set 2D array, with 2 parents per child

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages