64 lines
1.9 KiB
GDScript
64 lines
1.9 KiB
GDScript
class_name ImageTools
|
|
|
|
static func get_color_coverage(image: Image, color: Color = Color.WHITE) -> float:
|
|
return float(get_color_pixel_count(image, color))/(image.get_width()*image.get_height())
|
|
|
|
static func get_color_pixel_count(image: Image, color: Color = Color.WHITE) -> int:
|
|
var pixel_color_count = 0.
|
|
for x in range(image.get_width()):
|
|
for y in range(image.get_height()):
|
|
if image.get_pixel(x, y) == color:
|
|
pixel_color_count += 1.
|
|
return pixel_color_count
|
|
|
|
static func draw_circle(image: Image, center: Vector2i, length: int, color: Color = Color.WHITE):
|
|
for x in range(image.get_width()):
|
|
for y in range(image.get_height()):
|
|
var center_distance = Vector2i(x, y).distance_to(center)
|
|
|
|
if (center_distance <= length):
|
|
image.set_pixel(x, y, color)
|
|
|
|
|
|
static func draw_gradient(image: Image, center: Vector2i, length: int, color: Color = Color.WHITE, inverse := false):
|
|
for x in range(image.get_width()):
|
|
for y in range(image.get_height()):
|
|
var original_pixel_color = image.get_pixel(x, y)
|
|
var center_distance = Vector2i(x, y).distance_to(center)
|
|
|
|
if (center_distance == 0):
|
|
if not inverse:
|
|
image.set_pixel(x, y, original_pixel_color.blend(color))
|
|
else:
|
|
var color_to_add = Color(color, 1 / (center_distance / length)) if not inverse else Color(color, center_distance / length)
|
|
image.set_pixel(
|
|
x,
|
|
y,
|
|
original_pixel_color.blend(color_to_add)
|
|
)
|
|
|
|
static func flatten(image: Image, threshold := 0.5):
|
|
for x in range(image.get_width()):
|
|
for y in range(image.get_height()):
|
|
var original_pixel_color = image.get_pixel(x, y)
|
|
|
|
if original_pixel_color.r > threshold:
|
|
image.set_pixel(
|
|
x,
|
|
y,
|
|
Color.WHITE
|
|
)
|
|
else:
|
|
image.set_pixel(
|
|
x,
|
|
y,
|
|
Color.BLACK
|
|
)
|
|
|
|
static func copy(from: Image, to : Image):
|
|
for x in range(from.get_width()):
|
|
for y in range(from.get_height()):
|
|
to.set_pixel(x, y, from.get_pixel(x, y))
|
|
|
|
|