.{Color} := @use("./lib.hb"); .{memory, log} := @use("../../stn/src/lib.hb") Image := struct { buf: ^Color, width: i32, height: i32, } BitmapFileHeader := packed struct { img_type: u16, size: u32, reserved_1: u16, reserved_2: u16, offset: u32, } BitmapInfoHeader := packed struct { size: u32, width: i32, height: i32, planes: u16, bits: u16, compression: u32, image_size: u32, x_resolution: i32, y_resolution: i32, n_colours: u32, important_colours: u32, } BitmapColorHeader := packed struct { red_mask: u32, green_mask: u32, blue_mask: u32, alpha_mask: u32, color_space_type: u32, unused: u32, } from_bmp := fn(bmp: ^u8): Image { file_header := @as(^BitmapFileHeader, @bitcast(bmp)) if file_header.img_type != 0x4D42 { log.error("failed to load bmp image: not a bmp image, idiot\0") return @as(Image, idk) } info_header := @as(^BitmapInfoHeader, @bitcast(bmp + @sizeof(BitmapFileHeader))) bmp += file_header.offset return .(@bitcast(bmp), @bitcast(info_header.width), @bitcast(info_header.height)) }