Subversion Repositories Kolibri OS

Rev

Rev 8728 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
9174 akron1 1
(*
8728 leency 2
    Copyright 2016, 2021 Anton Krotov
3
 
4
    This file is part of CEdit.
5
 
6
    CEdit is free software: you can redistribute it and/or modify
7
    it under the terms of the GNU General Public License as published by
8
    the Free Software Foundation, either version 3 of the License, or
9
    (at your option) any later version.
10
 
11
    CEdit is distributed in the hope that it will be useful,
12
    but WITHOUT ANY WARRANTY; without even the implied warranty of
13
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
    GNU General Public License for more details.
15
 
16
    You should have received a copy of the GNU General Public License
17
    along with CEdit. If not, see .
18
*)
19
 
20
MODULE LibImg;
21
 
22
IMPORT SYSTEM, KOSAPI, File;
23
 
24
 
25
VAR
26
 
27
    file         : INTEGER;
28
 
29
    img_decode   : PROCEDURE (data, size, options: INTEGER): INTEGER;
30
    img_to_rgb2  : PROCEDURE (data, data_rgb: INTEGER);
31
    img_scale    : PROCEDURE (src, crop_x, crop_y, crop_width, crop_height, dst, scale, inter, param1, param2: INTEGER): INTEGER;
32
 
33
    img_destroy* : PROCEDURE (img: INTEGER);
34
 
35
 
36
PROCEDURE GetInf*(img: INTEGER; VAR sizeX, sizeY, data: INTEGER);
37
BEGIN
38
  SYSTEM.GET(img +  4, sizeX);
39
  SYSTEM.GET(img +  8, sizeY);
40
  SYSTEM.GET(img + 24, data);
41
END GetInf;
42
 
43
 
44
PROCEDURE GetImg*(ptr, n, Width: INTEGER; VAR sizeY: INTEGER): INTEGER;
45
VAR image_data, dst, x, y, type, rgb, data: INTEGER;
46
BEGIN
47
  image_data := img_decode(ptr, n, 0);
48
  IF image_data # 0 THEN
49
    SYSTEM.GET(image_data + 4, x);
50
    SYSTEM.GET(image_data + 8, y);
51
    SYSTEM.GET(image_data + 20, type);
52
    IF type # 2 THEN
53
      rgb := KOSAPI.malloc(x * y * 3);
54
      IF rgb # 0 THEN
55
        img_to_rgb2(image_data, rgb);
56
        SYSTEM.GET(image_data + 24, data);
57
        data := KOSAPI.free(data);
58
        SYSTEM.PUT(image_data + 24, rgb);
59
        SYSTEM.PUT(image_data + 20, 2)
60
      ELSE
61
        img_destroy(image_data);
62
        image_data := 0
63
      END
64
    END;
65
    IF (x > Width) & (image_data # 0) THEN
66
      dst := img_scale(image_data, 0, 0, x, y, dst, 3, 1, Width, (y * Width) DIV x);
67
      img_destroy(image_data);
68
      image_data := dst
69
    END;
70
    IF image_data # 0 THEN
71
      SYSTEM.GET(image_data +  8, sizeY)
72
    END
73
  END
74
  RETURN image_data
75
END GetImg;
76
 
77
 
78
PROCEDURE LoadFromFile* (FName: ARRAY OF CHAR; Width: INTEGER; VAR sizeY: INTEGER): INTEGER;
79
VAR F: File.FS; n, size, res: INTEGER;
80
BEGIN
81
  res := 0;
82
  F := File.Open(FName);
83
  IF F # NIL THEN
84
    size := File.Seek(F, 0, File.SEEK_END);
85
    n := File.Seek(F, 0, File.SEEK_BEG);
86
    file := KOSAPI.malloc(size + 1024);
87
    IF file # 0 THEN
88
      n := File.Read(F, file, size);
89
      res := GetImg(file, n, Width, sizeY);
90
      n := KOSAPI.free(file)
91
    END;
92
    File.Close(F)
93
  END
94
  RETURN res
95
END LoadFromFile;
96
 
97
 
98
PROCEDURE load;
99
VAR Lib: INTEGER;
100
 
101
  PROCEDURE GetProc(Lib, v: INTEGER; name: ARRAY OF CHAR);
102
  VAR a: INTEGER;
103
  BEGIN
104
    a := KOSAPI.GetProcAdr(name, Lib);
105
    ASSERT(a # 0);
106
    SYSTEM.PUT(v, a)
107
  END GetProc;
108
 
109
BEGIN
110
  Lib := KOSAPI.LoadLib("/rd/1/Lib/Libimg.obj");
111
  GetProc(Lib, SYSTEM.ADR(img_decode),  "img_decode");
112
  GetProc(Lib, SYSTEM.ADR(img_destroy), "img_destroy");
113
  GetProc(Lib, SYSTEM.ADR(img_to_rgb2), "img_to_rgb2");
114
  GetProc(Lib, SYSTEM.ADR(img_scale),   "img_scale");
115
END load;
116
 
117
 
118
BEGIN
119
  load
120
END LibImg.