with Interfaces.C.Strings; package body STB.Image is ---------- -- Load -- ---------- function Load (Filename : String; X, Y, Channels_In_File : out Interfaces.C.int; Desired_Channels : Interfaces.C.int) return System.Address is function C_Load (Filename : Interfaces.C.Strings.chars_ptr; X, Y, Comp : access Interfaces.C.int; Req_Comp : Interfaces.C.int) return System.Address; pragma Import (C, C_Load, "stbi_load"); Filename_C : Interfaces.C.Strings.chars_ptr := Interfaces.C.Strings.New_String (Filename); Result : System.Address; X_A, Y_A, Comp_A : aliased Interfaces.C.int; begin Result := C_Load (Filename_C, X_A'Access, Y_A'Access, Comp_A 'Access, Desired_Channels); Interfaces.C.Strings.Free (Filename_C); X := X_A; Y := Y_A; Channels_In_File := Comp_A; return Result; end Load; --------------- -- Write_PNG -- --------------- function Write_PNG (Filename : String; W, H, Channels : Interfaces.C.int; Data : System.Address; Len : Interfaces.C.int) return Interfaces.C.int is function C_Write (Filename : Interfaces.C.Strings.chars_ptr; W, H, Comp : Interfaces.C.int; Data : System.Address; Len : Interfaces.C.int) return Interfaces.C.int; pragma Import (C, C_Write, "stbi_write_png"); Filename_C : Interfaces.C.Strings.chars_ptr := Interfaces.C.Strings.New_String (Filename); Result : Interfaces.C.int; begin Result := C_Write (Filename_C, W, H, Channels, Data, Len); Interfaces.C.Strings.Free (Filename_C); return Result; end Write_PNG; end STB.Image;