Rev 7049 | Rev 7224 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 7049 | Rev 7190 | ||
---|---|---|---|
1 | //Asper |
1 | //Asper |
2 | #ifndef INCLUDE_LIBIMG_H |
2 | #ifndef INCLUDE_LIBIMG_H |
3 | #define INCLUDE_LIBIMG_H |
3 | #define INCLUDE_LIBIMG_H |
4 | 4 | ||
5 | #ifndef INCLUDE_KOLIBRI_H |
5 | #ifndef INCLUDE_KOLIBRI_H |
6 | #include "../lib/kolibri.h" |
6 | #include "../lib/kolibri.h" |
7 | #endif |
7 | #endif |
8 | 8 | ||
9 | #ifndef INCLUDE_MEM_H |
9 | #ifndef INCLUDE_MEM_H |
10 | #include "../lib/mem.h" |
10 | #include "../lib/mem.h" |
11 | #endif |
11 | #endif |
12 | 12 | ||
13 | #ifndef INCLUDE_DLL_H |
13 | #ifndef INCLUDE_DLL_H |
14 | #include "../lib/dll.h" |
14 | #include "../lib/dll.h" |
15 | #endif |
15 | #endif |
16 | 16 | ||
17 | #ifndef INCLUDE_LIBIO_H |
17 | #ifndef INCLUDE_LIBIO_H |
18 | #include "../lib/obj/libio.h" |
18 | #include "../lib/obj/libio.h" |
19 | #endif |
19 | #endif |
20 | 20 | ||
21 | :byte init_imglib_check; |
21 | :byte init_imglib_check; |
22 | 22 | ||
23 | //library |
23 | //library |
24 | dword libimg = #alibimg; |
24 | dword libimg = #alibimg; |
25 | char alibimg[21] = "/sys/lib/libimg.obj\0"; |
25 | char alibimg[21] = "/sys/lib/libimg.obj\0"; |
26 | 26 | ||
27 | dword libimg_init = #alibimg_init; |
27 | dword libimg_init = #alibimg_init; |
28 | dword img_is_img = #aimg_is_img; |
28 | dword img_is_img = #aimg_is_img; |
29 | dword img_to_rgb2 = #aimg_to_rgb2; |
29 | dword img_to_rgb2 = #aimg_to_rgb2; |
30 | dword img_decode = #aimg_decode; |
30 | dword img_decode = #aimg_decode; |
31 | dword img_destroy = #aimg_destroy; |
31 | dword img_destroy = #aimg_destroy; |
32 | dword img_draw = #aimg_draw; |
32 | dword img_draw = #aimg_draw; |
- | 33 | dword img_create = #aimg_create; |
|
- | 34 | dword img_encode = #aimg_encode; |
|
- | 35 | ||
33 | //dword img_flip = #aimg_flip; |
36 | //dword img_flip = #aimg_flip; |
34 | //dword img_rotate = #aimg_rotate; |
37 | //dword img_rotate = #aimg_rotate; |
35 | $DD 2 dup 0 |
38 | $DD 2 dup 0 |
36 | 39 | ||
37 | //import libimg , \ |
40 | //import libimg , \ |
38 | char alibimg_init[9] = "lib_init\0"; |
41 | char alibimg_init[9] = "lib_init\0"; |
39 | char aimg_is_img[11] = "img_is_img\0"; |
42 | char aimg_is_img[11] = "img_is_img\0"; |
40 | char aimg_to_rgb2[12] = "img_to_rgb2\0"; |
43 | char aimg_to_rgb2[12] = "img_to_rgb2\0"; |
41 | char aimg_decode[11] = "img_decode\0"; |
44 | char aimg_decode[11] = "img_decode\0"; |
42 | char aimg_destroy[12] = "img_destroy\0"; |
45 | char aimg_destroy[12] = "img_destroy\0"; |
43 | char aimg_draw[9] = "img_draw\0"; |
46 | char aimg_draw[9] = "img_draw\0"; |
- | 47 | char aimg_create[11] = "img_create\0"; |
|
- | 48 | char aimg_encode[11] = "img_encode\0"; |
|
44 | //char aimg_flip[9] = "img_flip\0"; |
49 | //char aimg_flip[9] = "img_flip\0"; |
45 | //char aimg_rotate[11] = "img_rotate\0 "; |
50 | //char aimg_rotate[11] = "img_rotate\0 "; |
- | 51 | ||
- | 52 | #define LIBIMG_FORMAT_BMP 1 |
|
- | 53 | #define LIBIMG_FORMAT_ICO 2 |
|
- | 54 | #define LIBIMG_FORMAT_CUR 3 |
|
- | 55 | #define LIBIMG_FORMAT_GIF 4 |
|
- | 56 | #define LIBIMG_FORMAT_PNG 5 |
|
- | 57 | #define LIBIMG_FORMAT_JPEG 6 |
|
- | 58 | #define LIBIMG_FORMAT_TGA 7 |
|
- | 59 | #define LIBIMG_FORMAT_PCX 8 |
|
- | 60 | #define LIBIMG_FORMAT_XCF 9 |
|
- | 61 | #define LIBIMG_FORMAT_TIFF 10 |
|
- | 62 | #define LIBIMG_FORMAT_PNM 11 |
|
- | 63 | #define LIBIMG_FORMAT_WBMP 12 |
|
- | 64 | #define LIBIMG_FORMAT_XBM 13 |
|
- | 65 | #define LIBIMG_FORMAT_Z80 14 |
|
- | 66 | ||
- | 67 | struct _Image |
|
- | 68 | { |
|
- | 69 | dword Checksum; // ((Width ROL 16) OR Height) XOR Data[0] ; ignored so far |
|
- | 70 | dword Width; |
|
- | 71 | dword Height; |
|
- | 72 | dword Next; |
|
- | 73 | dword Previous; |
|
- | 74 | dword Type; // one of Image.bppN |
|
- | 75 | dword Data; |
|
- | 76 | dword Palette; // used iff Type eq Image.bpp1, Image.bpp2, Image.bpp4 or Image.bpp8i |
|
- | 77 | dword Extended; |
|
- | 78 | dword Flags; // bitfield |
|
- | 79 | dword Delay; // used iff Image.IsAnimated is set in Flags |
|
- | 80 | }; |
|
- | 81 | ||
- | 82 | // values for Image.Type |
|
- | 83 | // must be consecutive to allow fast switch on Image.Type in support functions |
|
- | 84 | #define Image_bpp8i 1 // indexed |
|
- | 85 | #define Image_bpp24 2 |
|
- | 86 | #define Image_bpp32 3 |
|
- | 87 | #define Image_bpp15 4 |
|
- | 88 | #define Image_bpp16 5 |
|
- | 89 | #define Image_bpp1 6 |
|
- | 90 | #define Image_bpp8g 7 // grayscale |
|
- | 91 | #define Image_bpp2i 8 |
|
- | 92 | #define Image_bpp4i 9 |
|
46 | 93 | #define Image_bpp8a 10 // grayscale with alpha channel; application layer only!!! kernel doesn't handle this image type, libimg can only create and destroy such images |
|
47 | 94 | ||
48 | 95 | ||
49 | dword load_image(dword filename) |
96 | dword load_image(dword filename) |
50 | { |
97 | { |
51 | //align 4 |
98 | //align 4 |
52 | dword img_data=0; |
99 | dword img_data=0; |
53 | dword img_data_len=0; |
100 | dword img_data_len=0; |
54 | dword fh=0; |
101 | dword fh=0; |
55 | dword image=0; |
102 | dword image=0; |
56 | 103 | ||
57 | byte tmp_buf[40]; |
104 | byte tmp_buf[40]; |
58 | $and img_data, 0 |
105 | $and img_data, 0 |
59 | //$mov eax, filename |
106 | //$mov eax, filename |
60 | //$push eax |
107 | //$push eax |
61 | //invoke file.open, eax, O_READ |
108 | //invoke file.open, eax, O_READ |
62 | file_open stdcall (filename, O_READ); |
109 | file_open stdcall (filename, O_READ); |
63 | $or eax, eax |
110 | $or eax, eax |
64 | $jnz loc05 |
111 | $jnz loc05 |
65 | $stc |
112 | $stc |
66 | return 0; |
113 | return 0; |
67 | @loc05: |
114 | @loc05: |
68 | $mov fh, eax |
115 | $mov fh, eax |
69 | //invoke file.size |
116 | //invoke file.size |
70 | file_size stdcall (filename); |
117 | file_size stdcall (filename); |
71 | $mov img_data_len, ebx |
118 | $mov img_data_len, ebx |
72 | //stdcall mem.Alloc, ebx |
119 | //stdcall mem.Alloc, ebx |
73 | mem_Alloc(EBX); |
120 | mem_Alloc(EBX); |
74 | 121 | ||
75 | $test eax, eax |
122 | $test eax, eax |
76 | $jz error_close |
123 | $jz error_close |
77 | $mov img_data, eax |
124 | $mov img_data, eax |
78 | //invoke file.read, [fh], eax, [img_data_len] |
125 | //invoke file.read, [fh], eax, [img_data_len] |
79 | file_read stdcall (fh, EAX, img_data_len); |
126 | file_read stdcall (fh, EAX, img_data_len); |
80 | $cmp eax, -1 |
127 | $cmp eax, -1 |
81 | $jz error_close |
128 | $jz error_close |
82 | $cmp eax, img_data_len |
129 | $cmp eax, img_data_len |
83 | $jnz error_close |
130 | $jnz error_close |
84 | //invoke file.close, [fh] |
131 | //invoke file.close, [fh] |
85 | file_close stdcall (fh); |
132 | file_close stdcall (fh); |
86 | $inc eax |
133 | $inc eax |
87 | $jz error_ |
134 | $jz error_ |
88 | //; img.decode checks for img.is_img |
135 | //; img.decode checks for img.is_img |
89 | //; //invoke img.is_img, [img_data], [img_data_len] |
136 | //; //invoke img.is_img, [img_data], [img_data_len] |
90 | //; $or eax, eax |
137 | //; $or eax, eax |
91 | //; $jz exit |
138 | //; $jz exit |
92 | //invoke img.decode, [img_data], [img_data_len], 0 |
139 | //invoke img.decode, [img_data], [img_data_len], 0 |
93 | EAX=img_data; |
140 | EAX=img_data; |
94 | img_decode stdcall (EAX, img_data_len,0); |
141 | img_decode stdcall (EAX, img_data_len,0); |
95 | $or eax, eax |
142 | $or eax, eax |
96 | $jz error_ |
143 | $jz error_ |
97 | $cmp image, 0 |
144 | $cmp image, 0 |
98 | $pushf |
145 | $pushf |
99 | $mov image, eax |
146 | $mov image, eax |
100 | //call init_frame |
147 | //call init_frame |
101 | $popf |
148 | $popf |
102 | //call update_image_sizes |
149 | //call update_image_sizes |
103 | mem_Free(img_data);//free_img_data(img_data); |
150 | mem_Free(img_data);//free_img_data(img_data); |
104 | $clc |
151 | $clc |
105 | return image; |
152 | return image; |
106 | 153 | ||
107 | @error_free: |
154 | @error_free: |
108 | //invoke img.destroy, [image] |
155 | //invoke img.destroy, [image] |
109 | img_destroy stdcall (image); |
156 | img_destroy stdcall (image); |
110 | $jmp error_ |
157 | $jmp error_ |
111 | 158 | ||
112 | @error_pop: |
159 | @error_pop: |
113 | $pop eax |
160 | $pop eax |
114 | $jmp error_ |
161 | $jmp error_ |
115 | @error_close: |
162 | @error_close: |
116 | //invoke file.close, [fh] |
163 | //invoke file.close, [fh] |
117 | file_close stdcall (fh); |
164 | file_close stdcall (fh); |
118 | @error_: |
165 | @error_: |
119 | mem_Free(img_data); |
166 | mem_Free(img_data); |
120 | $stc |
167 | $stc |
121 | return 0; |
168 | return 0; |
122 | } |
169 | } |
123 | 170 | ||
124 | void DrawLibImage(dword image_pointer,x,y,w,h,offx,offy) { |
171 | void DrawLibImage(dword image_pointer,x,y,w,h,offx,offy) { |
125 | img_draw stdcall ( |
172 | img_draw stdcall ( |
126 | image_pointer, |
173 | image_pointer, |
127 | x, |
174 | x, |
128 | y, |
175 | y, |
129 | w, |
176 | w, |
130 | h, |
177 | h, |
131 | offx, |
178 | offx, |
132 | offy |
179 | offy |
133 | ); |
180 | ); |
134 | } |
181 | } |
- | 182 | ||
- | 183 | dword create_image(dword type, dword width, dword height) { |
|
- | 184 | img_create stdcall(width, height, type); |
|
- | 185 | return EAX; |
|
- | 186 | } |
|
- | 187 | ||
- | 188 | // size - output parameter, error code / the size of encoded data |
|
- | 189 | dword encode_image(dword image_ptr, dword options, dword specific_options, dword* size) { |
|
- | 190 | img_encode stdcall(image_ptr, options, specific_options); |
|
- | 191 | ESDWORD[size] = ECX; |
|
- | 192 | ||
- | 193 | return EAX; |
|
- | 194 | } |
|
135 | 195 | ||
136 | #endif |
196 | #endif |