agpl_1.0.0_b5da3320/src/agpl-bmp.ads

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
 

--  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;