Subversion Repositories Kolibri OS

Rev

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

Rev Author Line No. Line
2185 IgorA 1
use32
8236 IgorA 2
	org 0
3
	db 'MENUET01'
4
	dd 1,start,i_end,mem,stacktop,0,cur_dir_path
2185 IgorA 5
 
8236 IgorA 6
include '../../../../../KOSfuncs.inc'
2185 IgorA 7
include '../../../../../macros.inc'
8
include '../../../../../proc32.inc'
8236 IgorA 9
include '../../../../../load_lib.mac'
3014 dunkaist 10
include '../../../../../dll.inc'
2185 IgorA 11
 
8236 IgorA 12
@use_library mem.Alloc,mem.Free,mem.ReAlloc, dll.Load
2185 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_FILE0_SIZE equ 640*480*3 ;размер файла с изображением 640 x 480
25
IMAGE_FILE1_SIZE equ 200*186*3 ;размер файла с изображением 200 x 100
26
fn_foto db 'foto.jpg',0
27
 
28
macro load_image_file path,buf,size { ;макрос для загрузки изображений
29
	;path - может быть переменной или строковым параметром
30
	if path eqtype '' ;проверяем задан ли строкой параметр path
31
		jmp @f
32
			local .path_str
33
			.path_str db path ;формируем локальную переменную
34
			db 0
35
		@@:
36
		;32 - стандартный адрес по которому должен быть буфер с системным путем
37
		copy_path .path_str,[32],file_name,0x0
38
	else
39
		copy_path path,[32],file_name,0x0 ;формируем полный путь к файлу изображения, подразумеваем что он в одной папке с программой
40
	end if
41
 
42
	stdcall mem.Alloc, dword size ;выделяем память для изображения
43
	mov [buf],eax
44
 
45
	mov eax,70 ;70-я функция работа с файлами
46
	mov [run_file_70.Function], 0
47
	mov [run_file_70.Position], 0
48
	mov [run_file_70.Flags], 0
49
	mov [run_file_70.Count], dword size
50
	m2m [run_file_70.Buffer], [buf]
51
	mov byte[run_file_70+20], 0
52
	mov [run_file_70.FileName], file_name
53
	mov ebx,run_file_70
54
	int 0x40 ;загружаем файл изображения
55
	cmp ebx,0xffffffff
56
	je @f
57
		;определяем вид изображения и переводим его во временный буфер image_data
8236 IgorA 58
		stdcall [img_decode], [buf],ebx,0
59
		mov [image_data],eax
2185 IgorA 60
		;преобразуем изображение к формату rgb
8236 IgorA 61
		stdcall [img_to_rgb2], [image_data],[buf]
2185 IgorA 62
		;удаляем временный буфер image_data
8236 IgorA 63
		stdcall [img_destroy], [image_data]
2185 IgorA 64
	@@:
65
}
66
 
67
align 4
68
start:
69
	load_libraries l_libs_start,load_lib_end
70
 
71
	;проверка на сколько удачно загузилась наша либа
72
	mov	ebp,lib0
73
	cmp	dword [ebp+ll_struc_size-4],0
74
	jz	@f
75
		mcall -1 ;exit not correct
76
	@@:
77
	mov	ebp,lib1
78
	cmp	dword [ebp+ll_struc_size-4],0
79
	jz	@f
80
		mcall -1 ;exit not correct
81
	@@:
82
 
83
	mcall 40,0x27
84
	mcall 48,3,sc,sizeof.system_colors ;получаем системные цвета
85
 
86
	load_image_file fn_foto, image_data_foto,IMAGE_FILE0_SIZE
87
	stdcall [buf2d_create_f_img], buf_0,[image_data_foto] ;создаем буфер
88
	stdcall mem.Free,[image_data_foto] ;освобождаем память
89
 
90
	load_image_file 'img0.png',image_data_gray,IMAGE_FILE1_SIZE
91
	stdcall [buf2d_create_f_img], buf_1,[image_data_gray] ;создаем буфер
92
	stdcall mem.Free,[image_data_gray] ;освобождаем память
93
 
94
	load_image_file 'img1.png',image_data_rgb, IMAGE_FILE1_SIZE
95
	stdcall [buf2d_create_f_img], buf_2,[image_data_rgb] ;создаем буфер
96
	stdcall mem.Free,[image_data_rgb] ;освобождаем память
97
 
98
	stdcall [buf2d_conv_24_to_8], buf_1,1 ;делаем буфер прозрачности 8бит
99
	stdcall [buf2d_conv_24_to_32],buf_2,buf_1 ;делаем буфер rgba 32бит
100
 
101
	stdcall [buf2d_bit_blt], buf_0, 10,170, buf_2 ;рисуем изображение на фотографии
102
	stdcall [buf2d_bit_blt_transp], buf_0, 210,270, buf_2 ;рисуем прозрачное изображение на фотографии
103
	stdcall [buf2d_bit_blt_alpha], buf_0, 410,170, buf_1,0xff8080 ;рисуем контуры изображения на фотографии
104
 
105
align 4
106
red_win:
107
	call draw_window
108
 
109
align 4
110
still: ;главный цикл
111
	mcall 10
112
 
113
	cmp al,0x1 ;изменилось положение окна
114
	jz red_win
115
	cmp al,0x2
116
	jz key
117
	cmp al,0x3
118
	jz button
119
 
120
	jmp still
121
 
122
align 4
123
key:
124
	push eax ebx
125
	mcall 2
126
;...
127
	pop ebx eax
128
	jmp still
129
 
130
 
131
align 4
132
draw_window:
133
	pushad
134
	mcall 12,1
135
 
136
	mov edx,[sc.work]
137
	or  edx,0x33000000
138
	mcall 0,(20 shl 16)+670,(20 shl 16)+520,,,caption ;создание окна
139
 
140
	stdcall [buf2d_draw], buf_0
141
 
142
	mcall 12,2
143
	popad
144
	ret
145
 
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:
8236 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
2185 IgorA 157
load_lib_end:
158
 
159
align 4
160
button:
161
	mcall 17 ;получить код нажатой кнопки
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 ;удаляем буфер
168
	mcall -1 ;выход из программы
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
176
caption db 'Draw images 13.09.11',0 ;подпись окна
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 640 ;+8 w
185
	dd 480 ;+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 25 ;+4 left
193
	dw 25 ;+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 235 ;+4 left
203
	dw 25 ;+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_line dd sz_buf2d_line
265
	buf2d_circle dd sz_buf2d_circle
266
	buf2d_img_hdiv2 dd sz_buf2d_img_hdiv2
267
	buf2d_img_wdiv2 dd sz_buf2d_img_wdiv2
268
	buf2d_conv_24_to_8 dd sz_buf2d_conv_24_to_8
269
	buf2d_conv_24_to_32 dd sz_buf2d_conv_24_to_32
270
	buf2d_bit_blt dd sz_buf2d_bit_blt
271
	buf2d_bit_blt_transp dd sz_buf2d_bit_blt_transp
272
	buf2d_bit_blt_alpha dd sz_buf2d_bit_blt_alpha
273
	buf2d_curve_bezier dd sz_buf2d_curve_bezier
274
	buf2d_convert_text_matrix dd sz_buf2d_convert_text_matrix
275
	buf2d_draw_text dd sz_buf2d_draw_text
276
	dd 0,0
277
	sz_lib_init db 'lib_init',0
278
	sz_buf2d_create db 'buf2d_create',0
279
	sz_buf2d_create_f_img db 'buf2d_create_f_img',0
280
	sz_buf2d_clear db 'buf2d_clear',0
281
	sz_buf2d_draw db 'buf2d_draw',0
282
	sz_buf2d_delete db 'buf2d_delete',0
283
	sz_buf2d_line db 'buf2d_line',0
284
	sz_buf2d_circle db 'buf2d_circle',0 ;рисование окружности
285
	sz_buf2d_img_hdiv2 db 'buf2d_img_hdiv2',0
286
	sz_buf2d_img_wdiv2 db 'buf2d_img_wdiv2',0
287
	sz_buf2d_conv_24_to_8 db 'buf2d_conv_24_to_8',0
288
	sz_buf2d_conv_24_to_32 db 'buf2d_conv_24_to_32',0
289
	sz_buf2d_bit_blt db 'buf2d_bit_blt',0
290
	sz_buf2d_bit_blt_transp db 'buf2d_bit_blt_transp',0
291
	sz_buf2d_bit_blt_alpha db 'buf2d_bit_blt_alpha',0
292
	sz_buf2d_curve_bezier db 'buf2d_curve_bezier',0
293
	sz_buf2d_convert_text_matrix db 'buf2d_convert_text_matrix',0
294
	sz_buf2d_draw_text db 'buf2d_draw_text',0
295
 
296
i_end:
297
	rb 1024
298
stacktop:
299
	sys_path rb 4096
300
	file_name:
301
		rb 4096
302
	plugin_path:
303
		rb 4096
304
	openfile_path:
305
		rb 4096
306
	filename_area:
307
		rb 256
3014 dunkaist 308
mem: