Rev 6342 | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
255 | heavyiron | 1 | ; load picture from file to memory |
6328 | IgorA | 2 | align 4 |
3 | open_b rb 560 |
||
6371 | IgorA | 4 | txt_not_memory db 'Cannot open image. Because there is not enough available memory.',0 |
255 | heavyiron | 5 | |
6371 | IgorA | 6 | align 4 |
255 | heavyiron | 7 | load_picture: |
6328 | IgorA | 8 | mov [file_information.Function], SSF_GET_INFO |
9 | mov [file_information.Position], 0 |
||
10 | mov [file_information.Flags], 0 |
||
11 | mov dword[file_information.Count], 0 |
||
12 | mov dword[file_information.Buffer], open_b |
||
13 | mov byte[file_information+20], 0 |
||
14 | mov dword[file_information.FileName], file_path |
||
15 | mcall SF_FILE,file_information |
||
16 | or eax,eax |
||
17 | jnz .end_open |
||
255 | heavyiron | 18 | |
6328 | IgorA | 19 | mov ecx,dword[open_b+32] ;+32 qword: размер файла в байтах |
6371 | IgorA | 20 | add ecx,mem_screen+mem_panel_all+mem_flood_f |
6328 | IgorA | 21 | mcall SF_SYS_MISC,SSF_MEM_REALLOC,,[ScreenPointer] |
22 | mov [ScreenPointer],eax |
||
6371 | IgorA | 23 | add eax,mem_screen+mem_panel_all |
24 | sub ecx,mem_screen+mem_panel_all+mem_flood_f |
||
6328 | IgorA | 25 | mov [file_information.Function], SSF_READ_FILE |
26 | mov [file_information.Position], 0 |
||
27 | mov [file_information.Flags], 0 |
||
28 | mov [file_information.Count], ecx |
||
29 | mov [file_information.Buffer], eax |
||
30 | mov byte[file_information+20], 0 |
||
31 | mov [file_information.FileName], file_path |
||
32 | mcall SF_FILE,file_information ;загружаем файл изображения |
||
33 | cmp ebx,0xffffffff |
||
34 | je .end_open |
||
35 | ;определяем вид изображения и пишем его параметры |
||
36 | mov eax,[ScreenPointer] |
||
6371 | IgorA | 37 | add eax,mem_screen+mem_panel_all |
6328 | IgorA | 38 | stdcall [img_decode], eax,ebx,0 |
39 | push eax |
||
40 | ;определяем размер декодированного изображения |
||
41 | mov ecx,[eax+4] ;+4 = image width |
||
42 | mov dword[Picture_SizeX],ecx |
||
43 | mov eax,[eax+8] ;+8 = image height |
||
44 | mov dword[Picture_SizeY],eax |
||
45 | imul ecx,eax |
||
46 | imul ecx,15 |
||
6371 | IgorA | 47 | add ecx,mem_screen+mem_panel_all+mem_flood_f |
6328 | IgorA | 48 | mcall SF_SYS_MISC,SSF_MEM_REALLOC,,[ScreenPointer] |
6371 | IgorA | 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 |
||
56 | mov [ScreenPointer],eax |
||
57 | call prepare_data_pointers |
||
58 | pop ebx |
||
59 | stdcall [img_to_rgb2], ebx,[PointerToPicture] ;преобразуем изображение к формату rgb |
||
60 | mov [save_flag],1 |
||
61 | @@: |
||
6328 | IgorA | 62 | stdcall [img_destroy], ebx ;удаляем временный буфер с параметрами изображения |
63 | .end_open: |
||
1643 | mario79 | 64 | ret |