Subversion Repositories Kolibri OS

Rev

Rev 6342 | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 6342 Rev 6371
Line 1... Line 1...
1
; load picture from file to memory
1
; load picture from file to memory
2
align 4
2
align 4
3
open_b rb 560
3
open_b rb 560
-
 
4
txt_not_memory db 'Cannot open image. Because there is not enough available memory.',0
Line -... Line 5...
-
 
5
 
4
 
6
align 4
5
load_picture:
7
load_picture:
6
    mov [file_information.Function], SSF_GET_INFO
8
    mov [file_information.Function], SSF_GET_INFO
7
    mov [file_information.Position], 0
9
    mov [file_information.Position], 0
8
    mov [file_information.Flags], 0
10
    mov [file_information.Flags], 0
Line 13... Line 15...
13
    mcall SF_FILE,file_information
15
    mcall SF_FILE,file_information
14
	or eax,eax
16
	or eax,eax
15
	jnz .end_open
17
	jnz .end_open
Line 16... Line 18...
16
 
18
 
17
    mov ecx,dword[open_b+32] ;+32 qword: размер файла в байтах
19
    mov ecx,dword[open_b+32] ;+32 qword: размер файла в байтах
18
	add ecx,mem_screen+mem_panel_b+mem_flood_f
20
	add ecx,mem_screen+mem_panel_all+mem_flood_f
19
	mcall SF_SYS_MISC,SSF_MEM_REALLOC,,[ScreenPointer]
21
	mcall SF_SYS_MISC,SSF_MEM_REALLOC,,[ScreenPointer]
20
	mov [ScreenPointer],eax
22
	mov [ScreenPointer],eax
21
	add eax,mem_screen+mem_panel_b
23
	add eax,mem_screen+mem_panel_all
22
	sub ecx,mem_screen+mem_panel_b+mem_flood_f
24
	sub ecx,mem_screen+mem_panel_all+mem_flood_f
23
	mov [file_information.Function], SSF_READ_FILE
25
	mov [file_information.Function], SSF_READ_FILE
24
	mov [file_information.Position], 0
26
	mov [file_information.Position], 0
25
	mov [file_information.Flags], 0
27
	mov [file_information.Flags], 0
26
	mov [file_information.Count], ecx
28
	mov [file_information.Count], ecx
Line 30... Line 32...
30
	mcall SF_FILE,file_information ;загружаем файл изображения
32
	mcall SF_FILE,file_information ;загружаем файл изображения
31
	cmp ebx,0xffffffff
33
	cmp ebx,0xffffffff
32
	je .end_open
34
	je .end_open
33
		;определяем вид изображения и пишем его параметры
35
		;определяем вид изображения и пишем его параметры
34
		mov eax,[ScreenPointer]
36
		mov eax,[ScreenPointer]
35
		add eax,mem_screen+mem_panel_b
37
		add eax,mem_screen+mem_panel_all
36
		stdcall [img_decode], eax,ebx,0
38
		stdcall [img_decode], eax,ebx,0
37
		push eax
39
		push eax
38
		;определяем размер декодированного изображения
40
		;определяем размер декодированного изображения
39
		mov ecx,[eax+4] ;+4 = image width
41
		mov ecx,[eax+4] ;+4 = image width
40
		mov dword[Picture_SizeX],ecx
42
		mov dword[Picture_SizeX],ecx
41
		mov eax,[eax+8] ;+8 = image height
43
		mov eax,[eax+8] ;+8 = image height
42
		mov dword[Picture_SizeY],eax
44
		mov dword[Picture_SizeY],eax
43
		imul ecx,eax
45
		imul ecx,eax
44
		imul ecx,15
46
		imul ecx,15
45
		add ecx,mem_screen+mem_panel_b+mem_flood_f
47
		add ecx,mem_screen+mem_panel_all+mem_flood_f
46
		mcall SF_SYS_MISC,SSF_MEM_REALLOC,,[ScreenPointer]
48
		mcall SF_SYS_MISC,SSF_MEM_REALLOC,,[ScreenPointer]
-
 
49
		or eax,eax
-
 
50
		jnz .have_new_memory
-
 
51
			notify_window_run txt_not_memory
-
 
52
			pop ebx
-
 
53
			jmp @f
-
 
54
		.have_new_memory:
-
 
55
			;notify_window_run sz_main_menu_File_Open
47
		mov [ScreenPointer],eax
56
			mov [ScreenPointer],eax
48
		call prepare_data_pointers
57
			call prepare_data_pointers
49
		pop ebx
58
			pop ebx
50
		stdcall [img_to_rgb2], ebx,[PointerToPicture] ;преобразуем изображение к формату rgb
59
			stdcall [img_to_rgb2], ebx,[PointerToPicture] ;преобразуем изображение к формату rgb
51
		stdcall [img_destroy], ebx ;удаляем временный буфер с параметрами изображения
-
 
52
		mov [save_flag],1
60
			mov [save_flag],1
-
 
61
		@@:
-
 
62
		stdcall [img_destroy], ebx ;удаляем временный буфер с параметрами изображения
53
	.end_open:
63
	.end_open:
54
	ret
64
	ret