COLOR AVERAGING TOOL

This was more of an internal tool design that was addressed due to a rising problem that our design team had. They needed a simple to use tool that could average the colors of any given image. For what, I’m not entirely sure, but I was assigned to create something that would help them alleviate that problem.

While it wasn’t as complex as some of the other projects I’ve worked on, it did give me valuable experience with working in Java.This was accomplished around late 2021. This is one of the few projects that I am allowed to talk about in greater detail.

Major Technologies And Languages Used

That I can talk about of course…

Java
Asynchronous Programming
Multithreading

Built entirely in Java

Not sure why

I assume it was suppose to be a design challenge and a test of skill. In any case, the entire project was completed in Java. I learned after completing this project that writing in Java tends to be more cumbersome compared to other languages. However, understanding how to use Java is still valuable and I have only nice things to say about the development process.

The Averaging Algorithm

Simple is always better

Since this was designed to be a free internal tool, I focused mainly on designing something that was reliable. There wasn’t really a need to design the most high performance solution out there since the design team just needed something that worked, and they needed it quick.

I designed a system that would take all the images that were given to it and average each image to a RGB value. This was done by getting all the pixels within an image and stripping them down to their basic RGB value. From there it was just a matter of doing that for every pixel in the image and averaging all those values to a single RBG value.

The Unnecessary Step Of Speed

Still Needed Performance

While creating a fast program wasn’t much of a concern, I still ended up creating a system that kept performance in mind. This was mainly done by sending each image provided to it own thread. From there it would run through the averaging algorithm and return with a RGB value.

Once all the threads were complete, the program was then allowed to run the averaging algorithm again to give the final averaged color. Doing this asynchronously drastically sped up program execution time by allowing the program to essentially run multiple copies of itself per image given.

While I do recognize now that this particular setup would become strained if there was a lot of image provided (for example 10000 - 1000000 images), for the context that was needed, it preformed as expected for the needs that it was designed for.