1
0
Fork 0
mirror of https://github.com/ninjamuffin99/Funkin.git synced 2025-08-30 18:34:51 +00:00
Funkin/source/funkin/util/BitmapUtil.hx

80 lines
2.9 KiB
Haxe

package funkin.util;
import flixel.FlxG;
import openfl.display.BitmapData;
import openfl.geom.Matrix;
import openfl.geom.Point;
import openfl.geom.Rectangle;
class BitmapUtil
{
public static function createResultsBar():BitmapData
{
final width:Int = Math.ceil(FlxG.width * 1.011);
final mainBitmap = new BitmapData(width, Math.ceil(width / 8.7), true, 0xFF000000);
final bitmap = new BitmapData(width, Math.ceil(width / 8.7), true, 0);
final rect = mainBitmap.rect.clone();
final matrix = new Matrix();
matrix.rotate(-3.8 * Math.PI / 180);
matrix.translate(-15, 0);
rect.width -= 15;
bitmap.draw(mainBitmap, matrix, rect, true);
return bitmap;
}
/**
* Scales the bitmap at a specific position.
* @param bitmap The original bitmap to scale.
* @param scale The desired scale for the bitmap part (X Scale only).
* @param scalePosition The position of where it should scale the bitmap, If null it'll use the middle of the bitmap.
* @return A new BitmapData scaled at the specified position.
*/
public static function scalePart(bitmap:BitmapData, scale:Float, ?scalePosition:Float):BitmapData
{
if (scalePosition == null) scalePosition = bitmap.width / 2;
final scaledPartWidth:Int = Math.ceil(scalePosition * scale);
final finalBitmap:BitmapData = new BitmapData(Math.ceil(bitmap.width + scalePosition), bitmap.height, true, 0);
final matrix:Matrix = new Matrix();
final rect:Rectangle = bitmap.rect.clone();
matrix.scale(scale, 1);
rect.width = scaledPartWidth;
finalBitmap.draw(bitmap, matrix, rect, true);
final rect:Rectangle = bitmap.rect.clone();
rect.x = scalePosition;
finalBitmap.copyPixels(bitmap, rect, new Point(scaledPartWidth, 0));
return finalBitmap;
}
/**
* Scales the bitmap by adding a specific width at a specific position.
* @param bitmap The original bitmap to modify.
* @param additionalWidth The desired additional width to add to the bitmap.
* @param scalePosition The position of where it should scale the bitmap, If null it'll use the middle of the bitmap.
* @return A new BitmapData scaled at the specified position.
*/
public static function scalePartByWidth(bitmap:BitmapData, additionalWidth:Float, ?scalePosition:Float):BitmapData
{
if (scalePosition == null) scalePosition = bitmap.width / 2;
final scaledPartWidth:Int = Math.ceil(scalePosition + additionalWidth);
final scale:Float = scaledPartWidth / scalePosition;
final finalBitmap:BitmapData = new BitmapData(Math.ceil(bitmap.width + additionalWidth), bitmap.height, true, 0);
final matrix:Matrix = new Matrix();
final rect:Rectangle = bitmap.rect.clone();
matrix.scale(scale, 1);
rect.width = scaledPartWidth;
finalBitmap.draw(bitmap, matrix, rect, true);
final rect:Rectangle = bitmap.rect.clone();
rect.x = scalePosition;
finalBitmap.copyPixels(bitmap, rect, new Point(scaledPartWidth, 0));
return finalBitmap;
}
}