Subversion Repositories Kolibri OS

Rev

Rev 3138 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
3105 IgorA 1
use32
8271 IgorA 2
	org 0
3105 IgorA 3
	db 'MENUET01' ;идентиф. исполняемого файла всегда 8 байт
8271 IgorA 4
	dd 1,start,i_end,mem,stacktop,0,sys_path
3105 IgorA 5
 
6
include '../../../../../macros.inc'
7
include '../../../../../proc32.inc'
8271 IgorA 8
include '../../../../../KOSfuncs.inc'
9
include '../../../../../load_lib.mac'
3105 IgorA 10
include '../../../../../dll.inc'
11
 
8271 IgorA 12
@use_library mem.Alloc,mem.Free,mem.ReAlloc, dll.Load
3105 IgorA 13
 
14
struct FileInfoBlock
15
	Function dd ?
16
	Position dd ?
17
	Flags	 dd ?
18
	Count	 dd ?
19
	Buffer	 dd ?
20
		db ?
21
	FileName dd ?
22
ends
23
 
24
IMAGE_FILE1_SIZE equ 200*186*3 ;размер файла с изображением 200 x 100
25
 
26
BUF_STRUCT_SIZE equ 21
27
buf2d_data equ dword[edi] ;данные буфера изображения
28
buf2d_w equ dword[edi+8] ;ширина буфера
29
buf2d_h equ dword[edi+12] ;высота буфера
30
buf2d_l equ word[edi+4]
31
buf2d_t equ word[edi+6] ;отступ сверху
32
buf2d_size_lt equ dword[edi+4] ;отступ слева и справа для буфера
33
buf2d_color equ dword[edi+16] ;цвет фона буфера
34
buf2d_bits equ byte[edi+20] ;количество бит в 1-й точке изображения
35
vox_offs_tree_table equ 4
36
 
37
macro load_image_file path,buf,size { ;макрос для загрузки изображений
38
	;path - может быть переменной или строковым параметром
39
	if path eqtype '' ;проверяем задан ли строкой параметр path
40
		jmp @f
41
			local .path_str
42
			.path_str db path ;формируем локальную переменную
43
			db 0
44
		@@:
45
		;32 - стандартный адрес по которому должен быть буфер с системным путем
8271 IgorA 46
		copy_path .path_str,[32],file_name,0
3105 IgorA 47
	else
8271 IgorA 48
		copy_path path,[32],file_name,0 ;формируем полный путь к файлу изображения, подразумеваем что он в одной папке с программой
3105 IgorA 49
	end if
50
 
51
	stdcall mem.Alloc, dword size ;выделяем память для изображения
52
	mov [buf],eax
53
 
54
	mov eax,70 ;70-я функция работа с файлами
55
	mov [run_file_70.Function], 0
56
	mov [run_file_70.Position], 0
57
	mov [run_file_70.Flags], 0
58
	mov [run_file_70.Count], dword size
59
	m2m [run_file_70.Buffer], [buf]
60
	mov byte[run_file_70+20], 0
61
	mov [run_file_70.FileName], file_name
62
	mov ebx,run_file_70
63
	int 0x40 ;загружаем файл изображения
64
	cmp ebx,0xffffffff
65
	je @f
66
		;определяем вид изображения и переводим его во временный буфер image_data
8271 IgorA 67
		stdcall [img_decode], [buf],ebx,0
68
		mov [image_data],eax
3105 IgorA 69
		;преобразуем изображение к формату rgb
8271 IgorA 70
		stdcall [img_to_rgb2], [image_data],[buf]
3105 IgorA 71
		;удаляем временный буфер image_data
8271 IgorA 72
		stdcall [img_destroy], [image_data]
3105 IgorA 73
	@@:
74
}
75
 
76
align 4
77
start:
78
	load_libraries l_libs_start,load_lib_end
79
 
80
	;проверка на сколько удачно загузилась наша либа
81
	mov	ebp,lib0
82
	cmp	dword [ebp+ll_struc_size-4],0
83
	jz	@f
8271 IgorA 84
		mcall SF_TERMINATE_PROCESS
3105 IgorA 85
	@@:
86
	mov	ebp,lib1
87
	cmp	dword [ebp+ll_struc_size-4],0
88
	jz	@f
8271 IgorA 89
		mcall SF_TERMINATE_PROCESS
3105 IgorA 90
	@@:
91
 
8271 IgorA 92
	mcall SF_SET_EVENTS_MASK,0x27
93
	mcall SF_STYLE_SETTINGS,SSF_GET_COLORS,sc,sizeof.system_colors ;получаем системные цвета
3105 IgorA 94
 
95
	load_image_file 'img1.png',image_data_rgb, IMAGE_FILE1_SIZE
96
	stdcall [buf2d_create_f_img], buf_0,[image_data_rgb] ;создаем буфер
97
	stdcall [buf2d_create_f_img], buf_1,[image_data_rgb] ;создаем буфер
98
	stdcall [buf2d_create_f_img], buf_2,[image_data_rgb] ;создаем буфер
99
	stdcall mem.Free,[image_data_rgb] ;освобождаем память
100
 
3138 heavyiron 101
	stdcall [buf2d_filter_dither], buf_1,2
102
	stdcall [buf2d_filter_dither], buf_2,3
3105 IgorA 103
 
104
align 4
105
red_win:
106
	call draw_window
107
 
108
align 4
109
still: ;главный цикл
8271 IgorA 110
	mcall SF_WAIT_EVENT
3105 IgorA 111
 
8271 IgorA 112
	cmp al,1 ;изменилось положение окна
3105 IgorA 113
	jz red_win
8271 IgorA 114
	cmp al,2
3105 IgorA 115
	jz key
8271 IgorA 116
	cmp al,3
3105 IgorA 117
	jz button
118
 
119
	jmp still
120
 
121
align 4
122
key:
123
	push eax ebx
8271 IgorA 124
	mcall SF_GET_KEY
3105 IgorA 125
;...
126
	pop ebx eax
127
	jmp still
128
 
129
 
130
align 4
131
draw_window:
132
	pushad
8271 IgorA 133
	mcall SF_REDRAW,SSF_BEGIN_DRAW
3105 IgorA 134
 
135
	mov edx,[sc.work]
136
	or  edx,0x33000000
8271 IgorA 137
	mcall SF_CREATE_WINDOW,(20 shl 16)+670,(20 shl 16)+520,,,caption ;создание окна
3105 IgorA 138
 
139
	stdcall [buf2d_draw], buf_0
140
	stdcall [buf2d_draw], buf_1
141
	stdcall [buf2d_draw], buf_2
142
 
8271 IgorA 143
	mcall SF_REDRAW,SSF_END_DRAW
3105 IgorA 144
	popad
145
	ret
146
 
147
system_dir0 db '/sys/lib/'
148
name_buf2d db 'buf2d.obj',0
149
 
150
system_dir1 db '/sys/lib/'
151
name_libimg db 'libimg.obj',0
152
 
153
;library structures
154
l_libs_start:
8271 IgorA 155
	lib0 l_libs name_buf2d,  file_name, system_dir0, import_buf2d_lib
156
	lib1 l_libs name_libimg, file_name, system_dir1, import_libimg
3105 IgorA 157
load_lib_end:
158
 
159
align 4
160
button:
8271 IgorA 161
	mcall SF_GET_BUTTON
3105 IgorA 162
	cmp ah,1
163
	jne still
164
.exit:
165
	stdcall [buf2d_delete],buf_0 ;удаляем буфер
166
	stdcall [buf2d_delete],buf_1 ;удаляем буфер
167
	stdcall [buf2d_delete],buf_2 ;удаляем буфер
8271 IgorA 168
	mcall SF_TERMINATE_PROCESS
3105 IgorA 169
 
170
image_data dd 0 ;память для преобразования картинки функциями libimg
171
image_data_gray dd 0 ;память с преобразованным изображением в формате 8-bit
172
image_data_rgb dd 0 ;память с преобразованным изображением в формате rgb
173
image_data_foto dd 0
174
 
175
run_file_70 FileInfoBlock
8271 IgorA 176
caption db 'Draw images 28.11.20',0 ;подпись окна
3105 IgorA 177
sc system_colors  ;системные цвета
178
 
179
align 4
180
buf_0:
181
	dd 0 ;указатель на буфер изображения
182
	dw 5 ;+4 left
183
	dw 5 ;+6 top
184
	dd 200 ;+8 w
185
	dd 186 ;+12 h
186
	dd 0xffffff ;+16 color
187
	db 24 ;+20 bit in pixel
188
 
189
align 4
190
buf_1:
191
	dd 0 ;указатель на буфер изображения
192
	dw 5 ;+4 left
193
	dw 200 ;+6 top
194
	dd 200 ;+8 w
195
	dd 186 ;+12 h
196
	dd 0 ;+16 color
197
	db 24 ;+20 bit in pixel
198
 
199
align 4
200
buf_2:
201
	dd 0 ;указатель на буфер изображения
202
	dw 210 ;+4 left
203
	dw 200 ;+6 top
204
	dd 200 ;+8 w
205
	dd 186 ;+12 h
206
	dd 0 ;+16 color
207
	db 24 ;+20 bit in pixel
208
 
209
align 4
210
import_libimg:
211
	dd alib_init1
212
	img_is_img  dd aimg_is_img
213
	img_info    dd aimg_info
214
	img_from_file dd aimg_from_file
215
	img_to_file dd aimg_to_file
216
	img_from_rgb dd aimg_from_rgb
217
	img_to_rgb  dd aimg_to_rgb
218
	img_to_rgb2 dd aimg_to_rgb2
219
	img_decode  dd aimg_decode
220
	img_encode  dd aimg_encode
221
	img_create  dd aimg_create
222
	img_destroy dd aimg_destroy
223
	img_destroy_layer dd aimg_destroy_layer
224
	img_count   dd aimg_count
225
	img_lock_bits dd aimg_lock_bits
226
	img_unlock_bits dd aimg_unlock_bits
227
	img_flip    dd aimg_flip
228
	img_flip_layer dd aimg_flip_layer
229
	img_rotate  dd aimg_rotate
230
	img_rotate_layer dd aimg_rotate_layer
231
	img_draw    dd aimg_draw
232
 
233
	dd 0,0
234
	alib_init1   db 'lib_init',0
235
	aimg_is_img  db 'img_is_img',0 ;определяет по данным, может ли библиотека сделать из них изображение
236
	aimg_info    db 'img_info',0
237
	aimg_from_file db 'img_from_file',0
238
	aimg_to_file db 'img_to_file',0
239
	aimg_from_rgb db 'img_from_rgb',0
240
	aimg_to_rgb  db 'img_to_rgb',0 ;преобразование изображения в данные RGB
241
	aimg_to_rgb2 db 'img_to_rgb2',0
242
	aimg_decode  db 'img_decode',0 ;автоматически определяет формат графических данных
243
	aimg_encode  db 'img_encode',0
244
	aimg_create  db 'img_create',0
245
	aimg_destroy db 'img_destroy',0
246
	aimg_destroy_layer db 'img_destroy_layer',0
247
	aimg_count   db 'img_count',0
248
	aimg_lock_bits db 'img_lock_bits',0
249
	aimg_unlock_bits db 'img_unlock_bits',0
250
	aimg_flip    db 'img_flip',0
251
	aimg_flip_layer db 'img_flip_layer',0
252
	aimg_rotate  db 'img_rotate',0
253
	aimg_rotate_layer db 'img_rotate_layer',0
254
	aimg_draw    db 'img_draw',0
255
 
256
align 4
257
import_buf2d_lib:
258
	dd sz_lib_init
259
	buf2d_create dd sz_buf2d_create
260
	buf2d_create_f_img dd sz_buf2d_create_f_img
261
	buf2d_clear dd sz_buf2d_clear
262
	buf2d_draw dd sz_buf2d_draw
263
	buf2d_delete dd sz_buf2d_delete
264
	buf2d_filter_dither dd sz_buf2d_filter_dither
265
	dd 0,0
266
	sz_lib_init db 'lib_init',0
267
	sz_buf2d_create db 'buf2d_create',0
268
	sz_buf2d_create_f_img db 'buf2d_create_f_img',0
269
	sz_buf2d_clear db 'buf2d_clear',0
270
	sz_buf2d_draw db 'buf2d_draw',0
271
	sz_buf2d_delete db 'buf2d_delete',0
272
	sz_buf2d_filter_dither db 'buf2d_filter_dither',0
273
 
8271 IgorA 274
align 16
3105 IgorA 275
i_end:
276
	sys_path rb 4096
277
	file_name:
278
		rb 4096
279
	plugin_path:
280
		rb 4096
281
	openfile_path:
282
		rb 4096
283
	filename_area:
284
		rb 256
8271 IgorA 285
		rb 1024
286
stacktop:
3105 IgorA 287
mem: