; load picture from file to memory
align 4
open_b rb 560
txt_not_memory db 'Cannot open image. Because there is not enough available memory.',0

align 4
load_picture:
    mov [file_information.Function], SSF_GET_INFO
    mov [file_information.Position], 0
    mov [file_information.Flags], 0
    mov dword[file_information.Count], 0
    mov dword[file_information.Buffer], open_b
    mov byte[file_information+20], 0
    mov dword[file_information.FileName], file_path
    mcall SF_FILE,file_information
	or eax,eax
	jnz .end_open

    mov ecx,dword[open_b+32] ;+32 qword: размер файла в байтах
	add ecx,mem_screen+mem_panel_all+mem_flood_f
	mcall SF_SYS_MISC,SSF_MEM_REALLOC,,[ScreenPointer]
	mov [ScreenPointer],eax
	add eax,mem_screen+mem_panel_all
	sub ecx,mem_screen+mem_panel_all+mem_flood_f
	mov [file_information.Function], SSF_READ_FILE
	mov [file_information.Position], 0
	mov [file_information.Flags], 0
	mov [file_information.Count], ecx
	mov [file_information.Buffer], eax
	mov byte[file_information+20], 0
	mov [file_information.FileName], file_path
	mcall SF_FILE,file_information ;загружаем файл изображения
	cmp ebx,0xffffffff
	je .end_open
		;определяем вид изображения и пишем его параметры
		mov eax,[ScreenPointer]
		add eax,mem_screen+mem_panel_all
		stdcall [img_decode], eax,ebx,0
		push eax
		;определяем размер декодированного изображения
		mov ecx,[eax+4] ;+4 = image width
		mov dword[Picture_SizeX],ecx
		mov eax,[eax+8] ;+8 = image height
		mov dword[Picture_SizeY],eax
		imul ecx,eax
		imul ecx,15
		add ecx,mem_screen+mem_panel_all+mem_flood_f
		mcall SF_SYS_MISC,SSF_MEM_REALLOC,,[ScreenPointer]
		or eax,eax
		jnz .have_new_memory
			notify_window_run txt_not_memory
			pop ebx
			jmp @f
		.have_new_memory:
			;notify_window_run sz_main_menu_File_Open
			mov [ScreenPointer],eax
			call prepare_data_pointers
			pop ebx
			stdcall [img_to_rgb2], ebx,[PointerToPicture] ;преобразуем изображение к формату rgb
			mov [save_flag],1
		@@:
		stdcall [img_destroy], ebx ;удаляем временный буфер с параметрами изображения
	.end_open:
	ret