CS1335 Java and Processing
  • CS 1335 Computer Science 1
  • Getting Started
    • Processing IDE
    • Java vs Javascript
    • Review: Processing, Functions
    • HSB Color Mode
      • HSB Color Wheel
        • Example Code
      • HSB Color Palette Tool
    • Recursion
      • Recursion Call-Stack
      • Example Code
        • Example Code Feb 5 S20
        • Feb 12 Code
  • Project 1
    • Subjective Modeling of Emotions
    • Emotions represented using color, form, space
      • Kandinsky Color - Emotion
      • Emotional Intelligence
    • Project 1: PShapes
      • Example Code
      • Inspiration
    • PShape with Cutout - Inner Contour
    • VertexShape - Recursion
    • Project 1: Recursive Drawing
    • Project 1: Programmatic Variations in Color
      • Recursion with rotate, scale
      • Plan Region Size, Color
    • Map Function
    • Transforms for Mirroring
    • Project1-Steps
  • Grid Based Designs
    • Computational Design
      • Generative Design
    • Artist: Victor Vasarely
    • Grid Pattern Design
    • 1D - Array of PShapes for Grid Layout
      • Truchet Tiling
      • Example Code
    • PShapes in Grid Regions
    • Grid Region Logic
    • Pattern Preview - Transforms: Translate & Scale
  • Project 2
    • Project 2 - 2D Arrays for Gradient Logic
      • 2D Array Grid with Labels
    • Grid Patterns using 2D Array Indexes: i, j
      • Example Class Code
    • lerpColor( ) and map( ) Functions
    • Demo Lerp Colors
    • 2D Arrays with lerpColor
    • Create PShape 2D Array
    • Function: Populate2DArray( )
    • Function: DisplayShapeMatrix()
    • Transforms for Position, Rotation, Scale of ShapeMatrix Elements
    • Project 2 - Steps
    • Animation for ShapeMatrix
      • Animation w/Noise
  • Object Oriented Programming
    • Introduction to Objects
    • OOP vs Data-Flow
    • Button States
    • Buttons as Objects
      • Button Class
    • Create Object Instances
    • Button Types
    • Modeling Buttons: States and Events
    • OOP - Inheritance
    • OOP - Polymorphism
    • Child-Class: PImageButton
    • PShape - SVG Objects
    • Menu of Buttons
    • ButtonGroup - Final Version
    • Slider Controller
    • UML Class Diagram
  • Project 3
    • Project 3 - Logic, Steps
    • Example Code S20
      • Code Wed Apr 1
      • Code Wed Apr 8 v1
      • Code Wed Apr 8 v2
      • Code Mon Apr 13
      • Code Wed Apr 15
      • Code Mon Apr 20
      • Code Wed Apr 22
      • Code Mon Apr 27
      • Code Wed Apr 29
    • Project 3 - Class Definitions
      • Button
      • PImageButton
      • ButtonGroup
      • Pattern
        • PShapes - SVG, Vertex Shapes
        • Setting Colors For Patterns
        • Pattern - With Child-PShapes
      • Slider
      • Particles
  • Java Syntax
    • Java Syntax
      • Typed-Variables
      • Float - Integer Conversion Errors
      • Modulus
      • Functions
      • Object Reference Data Types
      • Arrays
        • Class Example Code
      • Switch-Case Statement
      • Ternary Operator
      • Class
      • Learning Science
    • UML Class Diagram
    • Glossary
  • Resources and References
    • Resources
    • Random Inspiration
      • Ulm School
      • Heart-Mind, Mind, Body
      • Statistical Uncertainty
Powered by GitBook
On this page
  • HSB Complimentary Color Palette
  • Color Palette Program

Was this helpful?

  1. Getting Started
  2. HSB Color Mode

HSB Color Palette Tool

PreviousExample CodeNextRecursion

Last updated 5 years ago

Was this helpful?

HSB Complimentary Color Palette

We can use the Processing function: get( x, y); to find the HSB color of any pixel on the canvas. If we combine that with our color-wheel, we can make a simple version of the .

For any selected pixel, which we identify as having the current color, we can find the complimentary color by finding a hue value on the opposite side of the color-wheel.

  • First, find the pixel color at the mouse position

    color curColor = get(mouseX, mouseY);

  • Find hue, saturation, brightness color components

  float _hue = hue(curColor);
  float _sat = saturation( curColor);
  float _bright = brightness(curColor);
  • Find complimentary color by adding 180 degrees to _hue, and use modulus 360 to constrain color values to 0-359 range

  float _complimentHue = (_hue + 180) % 360;
  • Finally, create a set of rectangles filled with sat, bright variations of the curColor and complimentHue

Color Palette Program

////Global Variables
float sat, bright;
///for initialization
void setup() {
  size( 800, 800);
  colorMode(HSB, 360, 100, 100);
  background(0);
  sat = 100; //initialize to full value saturation
  bright = 100;
  noStroke();
}

void draw() {
  if (mousePressed) { //when mousePressed, show Saturation version
    satGradientColorWheel(600);
  } else { //otherwise show brightness variation version
    brightGradientColorWheel(600);
  }
  //create complimentary colorPalette using get( ) function to find color of pixel at mouse position
  color curColor = get( mouseX, mouseY);
  createColorPalette( curColor, 0, 0); //createColorPalette with currentColor under mouse, at 0,0
}

void createColorPalette(color curColor, int x, int y) {
  float _hue = hue(curColor);
  float _sat = saturation(curColor);
  float complimentHue = (_hue + 180)% 360;
  fill(_hue, _sat * .6, 70); //first one darkest, dullest
  rect( x, y, 100, 100);
  fill(_hue, _sat * .7, 100 );//second one, brighter than first
  rect( x + 100, y, 100, 100);
  fill(curColor);
  rect( x+200, y, 100, 100); //current one in the middle
  fill( complimentHue, _sat, 70); //darker compliment
  rect( x+ 300, y, 100, 100);
  fill( complimentHue, _sat*.8, 100); //lighter compliment
  rect( x+ 400, y, 100, 100);
} //end colorPalette

void satGradientColorWheel( float size) {
  bright=100; //make sure bright and sat start at full values for outer circle
  for ( int i= 100; i>0; i -= 5) {
    sat=i;
    drawColorWheel(size * i / 100.0 );
  }
}

void brightGradientColorWheel(float size) {
  sat=100; //make sure bright and sat start at full values for outer circle
  for ( int i= 100; i>0; i -= 5) {
    bright=i;
    drawColorWheel(size * i / 100.0 );
  }
}

//draws a full color wheel
void drawColorWheel( float size ) {
  float angleSize=10; //declare and intialize local variables
  float startDegree=0; //used for drawing arc, value changes in loop after each arc is drawn
  int numSlices = int(360/angleSize); ///loop maximum value: how many slices to draw?

  for (int i=0; i < numSlices; i++) {
    float endDegree = startDegree + angleSize;
    float hue = startDegree + ( angleSize / 2); //calculate hue for middle of arc
    fill( hue, sat, bright); //set fill
    arc( width/2, height/2, size, size, radians(startDegree), radians( endDegree));
    startDegree += angleSize; //change startDegree for each new slice to be drawn
  }
}
Adobe Color Theme tool