code wiki / (root) / nx_img_adapt_gate.nx

nx_img_adapt_gate.nx source

↩ module page · 71 lines · 2513 B

1// nx_img_adapt_gate.nx -- unit-tests channel adaptation (nx_img_to_rgb) for 2// every PNG channel count, plus an RGB regression through the unified converter. 3// (Self-encoding gray/RGBA PNGs isn't possible -- nx_png_write is RGB-only -- 4// so the adapter is proven directly; the PNG branch wires it.) 5 6import "nx_syscalls.nx" 7import "nx_img_resample.nx" 8import "nx_png_decoder.nx" 9import "nx_seg_store.nx" 10import "nx_media_convert.nx" 11 12func main() -> i64 { 13 // nc=1 gray [50,200] -> [50,50,50, 200,200,200] 14 let g1: *u8 = sys_mmap(16) 15 g1[0] = 50 as u8 16 g1[1] = 200 as u8 17 let o1: *u8 = sys_mmap(16) 18 if nx_img_to_rgb(g1, 2, 1, 1, o1) != 0 { return 1 } 19 if o1[0] != (50 as u8) { return 2 } 20 if o1[2] != (50 as u8) { return 3 } 21 if o1[3] != (200 as u8) { return 4 } 22 if o1[5] != (200 as u8) { return 5 } 23 24 // nc=2 gray+alpha [50,99, 200,88] -> [50,50,50, 200,200,200] (alpha dropped) 25 let g2: *u8 = sys_mmap(16) 26 g2[0] = 50 as u8 27 g2[1] = 99 as u8 28 g2[2] = 200 as u8 29 g2[3] = 88 as u8 30 let o2: *u8 = sys_mmap(16) 31 if nx_img_to_rgb(g2, 2, 1, 2, o2) != 0 { return 6 } 32 if o2[0] != (50 as u8) { return 7 } 33 if o2[2] != (50 as u8) { return 8 } 34 if o2[3] != (200 as u8) { return 9 } 35 if o2[5] != (200 as u8) { return 10 } 36 37 // nc=4 RGBA [10,20,30,255, 40,50,60,128] -> [10,20,30, 40,50,60] 38 let g4: *u8 = sys_mmap(16) 39 g4[0] = 10 as u8 40 g4[1] = 20 as u8 41 g4[2] = 30 as u8 42 g4[3] = 255 as u8 43 g4[4] = 40 as u8 44 g4[5] = 50 as u8 45 g4[6] = 60 as u8 46 g4[7] = 128 as u8 47 let o4: *u8 = sys_mmap(16) 48 if nx_img_to_rgb(g4, 2, 1, 4, o4) != 0 { return 11 } 49 if o4[0] != (10 as u8) { return 12 } 50 if o4[1] != (20 as u8) { return 13 } 51 if o4[2] != (30 as u8) { return 14 } 52 if o4[3] != (40 as u8) { return 15 } 53 if o4[4] != (50 as u8) { return 16 } 54 if o4[5] != (60 as u8) { return 17 } 55 56 // nc=3 RGB passthrough 57 let g3: *u8 = sys_mmap(16) 58 g3[0] = 10 as u8 59 g3[1] = 20 as u8 60 g3[2] = 30 as u8 61 let o3: *u8 = sys_mmap(16) 62 if nx_img_to_rgb(g3, 1, 1, 3, o3) != 0 { return 18 } 63 if o3[0] != (10 as u8) { return 19 } 64 if o3[1] != (20 as u8) { return 20 } 65 if o3[2] != (30 as u8) { return 21 } 66 67 // regression: unified converter on a real RGB PNG still works end-to-end 68 if nx_media_convert_file("/mnt/c/Users/elder/nishi-core/nxc2/_sv_mc_src.png" as *u8, NX_RS_BILINEAR, 32, 32, "/mnt/c/Users/elder/nishi-core/nxc2/_sv_adapt_out.png" as *u8) != 0 { return 22 } 69 70 return 0 71}