Subversion Repositories Kolibri OS

Rev

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

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