auto color detection for credits
This commit is contained in:
@@ -0,0 +1,69 @@
|
||||
package funkin.utils;
|
||||
|
||||
import openfl.display.BitmapData;
|
||||
import flixel.util.FlxColor;
|
||||
|
||||
class BitmapUtil {
|
||||
/**
|
||||
* Returns the most present color in a Bitmap.
|
||||
* @param bmap Bitmap
|
||||
* @return FlxColor Color that is the most present.
|
||||
*/
|
||||
public static function getMostPresentColor(bmap:BitmapData):FlxColor {
|
||||
// map containing all the colors and the number of times they've been assigned.
|
||||
var colorMap:Map<FlxColor, Float> = [];
|
||||
var color:FlxColor = 0;
|
||||
var fixedColor:FlxColor = 0;
|
||||
|
||||
for(y in 0...bmap.height) {
|
||||
for(x in 0...bmap.width) {
|
||||
color = bmap.getPixel32(x, y);
|
||||
fixedColor = 0xFF000000 + (color % 0x1000000);
|
||||
if (colorMap[fixedColor] == null)
|
||||
colorMap[fixedColor] = 0;
|
||||
colorMap[fixedColor] += color.alphaFloat;
|
||||
}
|
||||
}
|
||||
|
||||
var mostPresentColor:FlxColor = 0;
|
||||
var mostPresentColorCount:Float = -1;
|
||||
for(c=>n in colorMap) {
|
||||
if (n > mostPresentColorCount) {
|
||||
mostPresentColorCount = n;
|
||||
mostPresentColor = c;
|
||||
}
|
||||
}
|
||||
return mostPresentColor;
|
||||
}
|
||||
/**
|
||||
* Returns the most present saturated color in a Bitmap.
|
||||
* @param bmap Bitmap
|
||||
* @return FlxColor Color that is the most present.
|
||||
*/
|
||||
public static function getMostPresentSaturatedColor(bmap:BitmapData):FlxColor {
|
||||
// map containing all the colors and the number of times they've been assigned.
|
||||
var colorMap:Map<FlxColor, Float> = [];
|
||||
var color:FlxColor = 0;
|
||||
var fixedColor:FlxColor = 0;
|
||||
|
||||
for(y in 0...bmap.height) {
|
||||
for(x in 0...bmap.width) {
|
||||
color = bmap.getPixel32(x, y);
|
||||
fixedColor = 0xFF000000 + (color % 0x1000000);
|
||||
if (colorMap[fixedColor] == null)
|
||||
colorMap[fixedColor] = 0;
|
||||
colorMap[fixedColor] += color.alphaFloat * 0.33 + (0.67 * (color.saturation * (2 * (color.lightness > 0.5 ? 0.5 - (color.lightness) : color.lightness))));
|
||||
}
|
||||
}
|
||||
|
||||
var mostPresentColor:FlxColor = 0;
|
||||
var mostPresentColorCount:Float = -1;
|
||||
for(c=>n in colorMap) {
|
||||
if (n > mostPresentColorCount) {
|
||||
mostPresentColorCount = n;
|
||||
mostPresentColor = c;
|
||||
}
|
||||
}
|
||||
return mostPresentColor;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
package funkin.utils;
|
||||
|
||||
import flixel.FlxG;
|
||||
import flixel.util.FlxColor;
|
||||
|
||||
class FlxInterpolateColor {
|
||||
public var red:Float = 0;
|
||||
public var green:Float = 0;
|
||||
public var blue:Float = 0;
|
||||
public var alpha:Float = 0;
|
||||
|
||||
public var color(get, set):FlxColor;
|
||||
|
||||
private inline function get_color()
|
||||
return FlxColor.fromRGBFloat(red, green, blue, alpha);
|
||||
|
||||
private inline function set_color(c:FlxColor):FlxColor {
|
||||
red = c.redFloat;
|
||||
green = c.greenFloat;
|
||||
blue = c.blueFloat;
|
||||
alpha = c.alphaFloat;
|
||||
return c;
|
||||
}
|
||||
|
||||
public inline function toString()
|
||||
return '[FlxInterpolateColor - (R:${red} | G:${green} | B:${blue} | A:${alpha})]';
|
||||
public function new(color:FlxColor) {
|
||||
this.color = color;
|
||||
}
|
||||
|
||||
public function lerpTo(color:FlxColor, ratio:Float) {
|
||||
red = (color.redFloat - red) * ratio + red;
|
||||
green = (color.greenFloat - green) * ratio + green;
|
||||
blue = (color.blueFloat - blue) * ratio + blue;
|
||||
alpha = (color.alphaFloat - alpha) * ratio + alpha;
|
||||
}
|
||||
|
||||
public inline function fpsLerpTo(color:FlxColor, ratio:Float)
|
||||
lerpTo(color, ratio * 60 * FlxG.elapsed);
|
||||
}
|
||||
Reference in New Issue
Block a user