Image: Add improved blending method and test it.

This commit is contained in:
Jeroen van Rijn
2024-06-09 16:10:06 +02:00
parent 8fcfd8c506
commit d2a2c1e74e
5 changed files with 63 additions and 12 deletions
+17
View File
@@ -42,6 +42,23 @@ GA_Pixel :: [2]u8
G_Pixel_16 :: [1]u16
GA_Pixel_16 :: [2]u16
blend_single_channel :: #force_inline proc(fg, alpha, bg: $T) -> (res: T) where T == u8 || T == u16 {
MAX :: 256 when T == u8 else 65536
c := u32(fg) * (MAX - u32(alpha)) + u32(bg) * (1 + u32(alpha))
return T(c & (MAX - 1))
}
blend_pixel :: #force_inline proc(fg: [$N]$T, alpha: T, bg: [N]T) -> (res: [N]T) where (T == u8 || T == u16), N >= 1 && N <= 4 {
MAX :: 256 when T == u8 else 65536
r_a := u32(fg) * (MAX - u32(alpha)) + u32(bg) * (1 + u32(alpha))
return
}
blend :: proc{blend_single_channel, blend_pixel}
Image :: struct {
width: int,
height: int,