code wiki / (root) / nx_xfade_demo.nx

nx_xfade_demo.nx source

↩ module page · 80 lines · 3531 B

1// nx_xfade_demo.nx -- VISIBLE proof of R4: crossfade two REAL gallery photos 2// with the SMOOTHSTEP curve and write 5 BMPs (0/25/50/75/100%) you can open on 3// Windows to SEE the smooth dissolve. Decodes real PNGs, blends via 4// nx_xfade_frame, writes via nx_bmp. Sovereign throughout. 5// Output: knowledge/staging/media/xfade_0.bmp .. xfade_4.bmp 6// license_tier: ORIGINAL 7import "nx_syscalls.nx" 8import "nx_image.nx" 9import "nx_png_decoder.nx" 10import "nx_gradient_blend.nx" 11import "nx_transition.nx" 12import "nx_bmp.nx" 13 14func gp(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } sys_write(1, s, n); return 0 } 15func gn(v: i64) -> i64 { 16 let bb: *u8 = sys_mmap(28) 17 var m: i64 = v 18 if m < 0 { sys_write(1, "-\x00" as *u8, 1); m = 0 - m } 19 let t: *u8 = sys_mmap(28) 20 var k: i64 = 0 21 if m == 0 { t[0] = 48 as u8; k = 1 } 22 while m > 0 { t[k] = (48 + (m % 10)) as u8; m = m / 10; k = k + 1 } 23 var i: i64 = 0 24 while i < k { bb[i] = t[k - 1 - i]; i = i + 1 } 25 sys_write(1, bb, k) 26 return 0 27} 28 29func png2img(path: *u8) -> *Image { 30 let szp: *i64 = sys_mmap(16) as *i64 31 let buf: *u8 = sys_read_file(path, szp) 32 if (buf as i64) == 0 { return 0 as *Image } 33 let r: *NxPngResult = nx_png_decode(buf, szp[0]) 34 if (r as i64) == 0 { return 0 as *Image } 35 if r.error_code != NX_PNG_OK { return 0 as *Image } 36 let raw: *u8 = sys_mmap(40) 37 let img: *Image = raw as *Image 38 img.pixels = r.pixels 39 img.width = r.header.width 40 img.height = r.header.height 41 img.channels = r.n_channels 42 img.stride = r.header.width * r.n_channels 43 return img 44} 45 46func main() -> i64 { 47 let a: *Image = png2img("knowledge/staging/media/gallery/20260612_000008_c21f8b7c_3860894667_laptop.png\x00" as *u8) 48 let b: *Image = png2img("knowledge/staging/media/gallery/20260612_000130_287bd5eb_2221482208_laptop.png\x00" as *u8) 49 if (a as i64) == 0 { gp("xfade_demo: A decode failed\n\x00" as *u8); return 1 } 50 if (b as i64) == 0 { gp("xfade_demo: B decode failed\n\x00" as *u8); return 2 } 51 gp("xfade_demo A=\x00" as *u8); gn(a.width); gp("x\x00" as *u8); gn(a.height) 52 gp(" B=\x00" as *u8); gn(b.width); gp("x\x00" as *u8); gn(b.height); gp("\n\x00" as *u8) 53 54 let w: i64 = a.width 55 let h: i64 = a.height 56 let out: *Image = nx_image_alloc(w, h, 3) 57 let Q: i64 = NX_GB_Q 58 59 let paths: *i64 = sys_mmap(64) as *i64 60 // 5 fixed output paths 61 let p0: *u8 = "knowledge/staging/media/xfade_0.bmp\x00" as *u8 62 let p1: *u8 = "knowledge/staging/media/xfade_1.bmp\x00" as *u8 63 let p2: *u8 = "knowledge/staging/media/xfade_2.bmp\x00" as *u8 64 let p3: *u8 = "knowledge/staging/media/xfade_3.bmp\x00" as *u8 65 let p4: *u8 = "knowledge/staging/media/xfade_4.bmp\x00" as *u8 66 67 nx_xfade_frame(a, b, 0, NX_GB_CURVE_SMOOTHSTEP, out); bmp_write(out, p0) 68 gp(" wrote xfade_0.bmp (0%)\n\x00" as *u8) 69 nx_xfade_frame(a, b, Q / 4, NX_GB_CURVE_SMOOTHSTEP, out); bmp_write(out, p1) 70 gp(" wrote xfade_1.bmp (25%)\n\x00" as *u8) 71 nx_xfade_frame(a, b, Q / 2, NX_GB_CURVE_SMOOTHSTEP, out); bmp_write(out, p2) 72 gp(" wrote xfade_2.bmp (50%)\n\x00" as *u8) 73 nx_xfade_frame(a, b, (Q * 3) / 4, NX_GB_CURVE_SMOOTHSTEP, out); bmp_write(out, p3) 74 gp(" wrote xfade_3.bmp (75%)\n\x00" as *u8) 75 nx_xfade_frame(a, b, Q, NX_GB_CURVE_SMOOTHSTEP, out); bmp_write(out, p4) 76 gp(" wrote xfade_4.bmp (100%)\n\x00" as *u8) 77 78 gp("xfade_demo done -> knowledge/staging/media/xfade_0..4.bmp (open to SEE the dissolve)\n\x00" as *u8) 79 return 0 80}