Blend class
class Blend { static int normal(int a, int b) => b; static int overlay(num a, num b) { a /= 255; b /= 255; var result = 0; if (a < 0.5) result = 2 * a * b; else result = 1 - 2 * (1 - a) * (1 - b); return min(255, max(0, result * 255)).toInt(); } static int hardLight(int a, int b) => Blend.overlay(b, a); static int softLight(num a, num b) { a /= 255; b /= 255; var v = ((1 - 2 * b) * a + 2 * b) * a; return limitValue((v * 255).toInt(), 0, 255); } static int dodge(int a, int b) => min(256 * a ~/ (255 - b + 1), 255); static int burn(int a, int b) => 255 - min(256 * (255 - a) ~/ (b + 1), 255); static int multiply(int a, int b) => b * a ~/ 255; static int divide(int a, int b) => min(256 * a ~/ (b + 1), 255); static int screen(int a, int b) => 255 - (255 - b) * (255 - a) ~/ 255; static int grainExtract(int a, int b) => limitValue(a - b + 128, 0, 255); static int grainMerge(int a, int b) => limitValue(a + b - 128, 0, 255); static int difference(int a, int b) => (a - b).abs(); static int addition(int a, int b) => min(a + b, 255); static int substract(int a, int b) => max(a - b, 0); static int darkenOnly(int a, int b) => min(a, b); static int lightenOnly(int a, int b) => max(a, b); static List<int> color(List<int> a, List<int> b) { var aHSL = rgbListToHsl(a); var bHSL = rgbListToHsl(b); return hslToRgb(bHSL[0], bHSL[1], aHSL[2]); } static List<int> hue(List<int> a, List<int> b) { var aHSV = rgbListToHsv(a); var bHSV = rgbListToHsv(b); if(bHSV[1] == 0) return hsvToRgb(aHSV[0], aHSV[1], aHSV[2]); else return hsvToRgb(bHSV[0], aHSV[1], aHSV[2]); } static List<int> value(List<int> a, List<int> b) { var aHSV = rgbListToHsv(a); var bHSV = rgbListToHsv(b); return hsvToRgb(aHSV[0], aHSV[1], bHSV[2]); } static List<int> saturation(List<int> a, List<int> b) { var aHSV = rgbListToHsv(a); var bHSV = rgbListToHsv(b); return hsvToRgb(aHSV[0], bHSV[1], aHSV[2]); } }
Static Methods
int normal(int a, int b) #
static int normal(int a, int b) => b;
int overlay(num a, num b) #
static int overlay(num a, num b) { a /= 255; b /= 255; var result = 0; if (a < 0.5) result = 2 * a * b; else result = 1 - 2 * (1 - a) * (1 - b); return min(255, max(0, result * 255)).toInt(); }
int hardLight(int a, int b) #
static int hardLight(int a, int b) => Blend.overlay(b, a);
int softLight(num a, num b) #
static int softLight(num a, num b) { a /= 255; b /= 255; var v = ((1 - 2 * b) * a + 2 * b) * a; return limitValue((v * 255).toInt(), 0, 255); }
int dodge(int a, int b) #
static int dodge(int a, int b) => min(256 * a ~/ (255 - b + 1), 255);
int burn(int a, int b) #
static int burn(int a, int b) => 255 - min(256 * (255 - a) ~/ (b + 1), 255);
int multiply(int a, int b) #
static int multiply(int a, int b) => b * a ~/ 255;
int divide(int a, int b) #
static int divide(int a, int b) => min(256 * a ~/ (b + 1), 255);
int screen(int a, int b) #
static int screen(int a, int b) => 255 - (255 - b) * (255 - a) ~/ 255;
int grainExtract(int a, int b) #
static int grainExtract(int a, int b) => limitValue(a - b + 128, 0, 255);
int grainMerge(int a, int b) #
static int grainMerge(int a, int b) => limitValue(a + b - 128, 0, 255);
int difference(int a, int b) #
static int difference(int a, int b) => (a - b).abs();
int addition(int a, int b) #
static int addition(int a, int b) => min(a + b, 255);
int substract(int a, int b) #
static int substract(int a, int b) => max(a - b, 0);
int darkenOnly(int a, int b) #
static int darkenOnly(int a, int b) => min(a, b);
int lightenOnly(int a, int b) #
static int lightenOnly(int a, int b) => max(a, b);
List<int> color(List<int> a, List<int> b) #
static List<int> color(List<int> a, List<int> b) { var aHSL = rgbListToHsl(a); var bHSL = rgbListToHsl(b); return hslToRgb(bHSL[0], bHSL[1], aHSL[2]); }
List<int> hue(List<int> a, List<int> b) #
static List<int> hue(List<int> a, List<int> b) { var aHSV = rgbListToHsv(a); var bHSV = rgbListToHsv(b); if(bHSV[1] == 0) return hsvToRgb(aHSV[0], aHSV[1], aHSV[2]); else return hsvToRgb(bHSV[0], aHSV[1], aHSV[2]); }
List<int> value(List<int> a, List<int> b) #
static List<int> value(List<int> a, List<int> b) { var aHSV = rgbListToHsv(a); var bHSV = rgbListToHsv(b); return hsvToRgb(aHSV[0], aHSV[1], bHSV[2]); }
List<int> saturation(List<int> a, List<int> b) #
static List<int> saturation(List<int> a, List<int> b) { var aHSV = rgbListToHsv(a); var bHSV = rgbListToHsv(b); return hsvToRgb(aHSV[0], bHSV[1], aHSV[2]); }