-- Packages for work with BMP files with Agpl.Streams; with Agpl.Types; with Interfaces; with Ada.Finalization; with Ada.Streams; package Agpl.Bmp is pragma Preelaborate; -- Mime_type Mime_type : constant String := "image/bmp"; -- Exception if drawing out of bounds: Coordinates_out_of_bounds : exception; ------------------------------------------------------------------------ -- Object -- ------------------------------------------------------------------------ -- A Bmp object. Only 24bpp, uncompressed are valid ATM. type Object is tagged private; ------------------------------------------------------------------------ -- Create -- ------------------------------------------------------------------------ procedure Create ( This : in out Object; Width : in Positive; Height : in Positive); ------------------------------------------------------------------------ -- Get_pixel -- ------------------------------------------------------------------------ function Get_pixel ( This : in Object; Row, Column : in Integer) return Types.Rgb_triplet; ------------------------------------------------------------------------ -- Set_pixel -- ------------------------------------------------------------------------ procedure Set_pixel ( This : in out Object; Row, Column : in Integer; Rgb : in Types.Rgb_triplet); ------------------------------------------------------------------------ -- Set_checking -- ------------------------------------------------------------------------ -- If drawing outbounds, we can get an error or silent discarding: procedure Set_checking (This : in out Object; Check : in Boolean := True); ------------------------------------------------------------------------ -- Get_stream -- ------------------------------------------------------------------------ -- Returns a stream with a valid BMP representation (not the pixel matrix). function Get_stream (This : in Object) return Ada.Streams.Stream_element_array; private pragma Inline (Get_pixel, Set_pixel); -- Data types type Short_int is new Interfaces.Integer_16; type Int is new Interfaces.Integer_32; type Object is new Ada.Finalization.Controlled with record -- Pixels Data : Agpl.Streams.Stream_element_array_access; -- Dimensions Width : Positive; Height : Positive; -- Checking Checking : Boolean := True; end record; procedure Initialize (This : in out Object); procedure Adjust (This : in out Object); procedure Finalize (This : in out Object); end Agpl.Bmp;