Rev 6836 | Rev 6906 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 6836 | Rev 6879 | ||
---|---|---|---|
Line 1... | Line 1... | ||
1 | ; |
1 | ; |
2 | ; Макрос для загрузки изображений чрез функции библиотеки libimg. |
2 | ; ªà®á ¤«ï § £à㧪¨ ¨§®¡à ¦¥¨© ç१ äãªæ¨¨ ¡¨¡«¨®â¥ª¨ libimg. |
3 | ; Действия которые делает макрос load_image_file: |
3 | ; ¥©áâ¢¨ï ª®â®àë¥ ¤¥« ¥â ¬ ªà®á load_image_file: |
4 | ; |
4 | ; |
5 | ; Проверяет размер полученного файла с изображением. |
5 | ; ஢¥àï¥â à §¬¥à ¯®«ã祮£® ä ©« á ¨§®¡à ¦¥¨¥¬. |
6 | ; Выделяет под него память и загружает туда файл. |
6 | ; 뤥«ï¥â ¯®¤ ¥£® ¯ ¬ïâì ¨ § £à㦠¥â âã¤ ä ©«. |
7 | ; Определяет размер памяти необходимой для распаковки изображения. |
7 | ; ¯à¥¤¥«ï¥â à §¬¥à ¯ ¬ï⨠¥®¡å®¤¨¬®© ¤«ï à ᯠª®¢ª¨ ¨§®¡à ¦¥¨ï. |
8 | ; Перевыделяет память, и распаковывает изображение из форматов jpg, png, ... |
8 | ; ¥à¥¢ë¤¥«ï¥â ¯ ¬ïâì, ¨ à ᯠª®¢ë¢ ¥â ¨§®¡à ¦¥¨¥ ¨§ ä®à¬ ⮢ jpg, png, ... |
9 | ; в формат rgb который можно выводить на экран через сист. функцию. |
9 | ; ¢ ä®à¬ â rgb ª®â®àë© ¬®¦® ¢ë¢®¤¨âì íªà ç¥à¥§ á¨áâ. äãªæ¨î. |
10 | ; При необходимости можно также получить размеры открываемого изображения для |
10 | ; ਠ¥®¡å®¤¨¬®á⨠¬®¦® â ª¦¥ ¯®«ãç¨âì à §¬¥àë ®âªàë¢ ¥¬®£® ¨§®¡à ¦¥¨ï ¤«ï |
11 | ; их дальнейшего использования в программе. |
11 | ; ¨å ¤ «ì¥©è¥£® ¨á¯®«ì§®¢ ¨ï ¢ ¯à®£à ¬¬¥. |
12 | ; |
12 | ; |
13 | ; В использующей программе должна быть подключена библиотека libimg, |
13 | ; ¨á¯®«ì§ãî饩 ¯à®£à ¬¬¥ ¤®«¦ ¡ëâì ¯®¤ª«îç¥ ¡¨¡«¨®â¥ª libimg, |
14 | ; объявлена переменная file_name размером около 4096 байт, |
14 | ; ®¡ê¥ ¯¥à¥¬¥ ï file_name à §¬¥à®¬ ®ª®«® 4096 ¡ ©â, |
15 | ; а также структура run_file_70 типа FileInfoBlock. |
15 | ; â ª¦¥ áâàãªâãà run_file_70 ⨯ FileInfoBlock. |
Line 16... | Line 16... | ||
16 | 16 | ||
17 | ; подключение некоторых необходимых файлов: |
17 | ; ¯®¤ª«î票¥ ¥ª®â®àëå ¥®¡å®¤¨¬ëå ä ©«®¢: |
18 | include 'dll.inc' |
18 | include 'dll.inc' |
19 | include 'develop/libraries/box_lib/load_lib.mac' |
19 | include 'develop/libraries/box_lib/load_lib.mac' |
Line 20... | Line 20... | ||
20 | include 'develop/libraries/libs-dev/libio/libio.inc' |
20 | include 'develop/libraries/libs-dev/libio/libio.inc' |
21 | 21 | ||
Line -... | Line 22... | ||
- | 22 | align 4 |
|
- | 23 | open_b rb 560 |
|
- | 24 | ||
- | 25 | txt_err_img_file: |
|
- | 26 | if lang eq ru |
|
- | 27 | db '訡ª N' |
|
- | 28 | .n: db '* ¯à¨ ®âªàë⨨ ä ©« ' |
|
- | 29 | else |
|
- | 30 | db 'Error N' |
|
- | 31 | .n: db '*. Can',39,'t open file ' |
|
22 | align 4 |
32 | end if |
23 | open_b rb 560 |
33 | .f: dd 0,0 |
24 | 34 | ||
25 | ; path - может быть переменной или строковым параметром |
35 | ; path - ¬®¦¥â ¡ëâì ¯¥à¥¬¥®© ¨«¨ áâப®¢ë¬ ¯ à ¬¥â஬ |
26 | ; buf - переменная куда будет записан указатель на изображение в формате rgb, |
36 | ; buf - ¯¥à¥¬¥ ï ªã¤ ¡ã¤¥â § ¯¨á 㪠§ â¥«ì ¨§®¡à ¦¥¨¥ ¢ ä®à¬ ⥠rgb, |
27 | ; в случае если файл не откроется то будет записан 0 |
37 | ; ¢ á«ãç ¥ ¥á«¨ ä ©« ¥ ®âªà®¥âáï â® ¡ã¤¥â § ¯¨á 0 |
28 | ; img_w, img_h - переменные куда будут записаны размеры открываемого |
38 | ; img_w, img_h - ¯¥à¥¬¥ë¥ ªã¤ ¡ã¤ãâ § ¯¨á ë à §¬¥àë ®âªàë¢ ¥¬®£® |
29 | ; изображения, не обязательные параметры |
39 | ; ¨§®¡à ¦¥¨ï, ¥ ®¡ï§ ⥫ìë¥ ¯ à ¬¥âàë |
30 | ; bytes_p_p - сколько байт памяти брать на пиксель, не обязательный параметр |
40 | ; bytes_p_p - ᪮«ìª® ¡ ©â ¯ ¬ï⨠¡à âì ¯¨ªá¥«ì, ¥ ®¡ï§ ⥫ìë© ¯ à ¬¥âà |
- | 41 | ; ¥á«¨ ¥ 㪠§ ¡¥à¥âáï 3. ¨¨¬ «ì®¥ § 票¥ ¤®«¦® ¡ëâì ¥ ¬¥ìè¥ 3. |
|
31 | ; если не указан берется 3. Минимальное значение должно быть не меньше 3. |
42 | macro load_image_file path, buf, img_w, img_h, bytes_p_p |
- | 43 | { |
|
32 | macro load_image_file path, buf, img_w, img_h, bytes_p_p |
44 | local .err_open |
33 | { |
45 | local .end_open |
34 | local .end_open |
46 | |
35 | if path eqtype '' ;проверяем задан ли строкой параметр path |
47 | if path eqtype '' ;¯à®¢¥à塞 § ¤ «¨ áâப®© ¯ à ¬¥âà path |
36 | local .path_str |
48 | local .path_str |
37 | jmp @f |
49 | jmp @f |
38 | .path_str db path ;формируем локальную переменную |
50 | .path_str db path ;ä®à¬¨à㥬 «®ª «ìãî ¯¥à¥¬¥ãî |
39 | db 0 |
51 | db 0 |
40 | @@: |
52 | @@: |
41 | ;32 - стандартный адрес по которому должен быть буфер с системным путем |
53 | ;32 - áâ ¤ àâë© ¤à¥á ¯® ª®â®à®¬ã ¤®«¦¥ ¡ëâì ¡ãä¥à á á¨áâ¥¬ë¬ ¯ã⥬ |
42 | copy_path .path_str,[32],file_name,0 |
54 | copy_path .path_str,[32],file_name,0 |
43 | else |
55 | else |
Line 44... | Line 56... | ||
44 | copy_path path,[32],file_name,0 ;формируем полный путь к файлу изображения, подразумеваем что он в одной папке с программой |
56 | copy_path path,[32],file_name,0 ;ä®à¬¨à㥬 ¯®«ë© ¯ãâì ª ä ©«ã ¨§®¡à ¦¥¨ï, ¯®¤à §ã¬¥¢ ¥¬ çâ® ® ¢ ®¤®© ¯ ¯ª¥ á ¯à®£à ¬¬®© |
45 | end if |
57 | end if |
Line 52... | Line 64... | ||
52 | mov dword[run_file_70.Buffer], open_b |
64 | mov dword[run_file_70.Buffer], open_b |
53 | mov byte[run_file_70+20], 0 |
65 | mov byte[run_file_70+20], 0 |
54 | mov dword[run_file_70.FileName], file_name |
66 | mov dword[run_file_70.FileName], file_name |
55 | mcall SF_FILE,run_file_70 |
67 | mcall SF_FILE,run_file_70 |
56 | or eax,eax |
68 | or eax,eax |
57 | jnz .end_open |
69 | jnz .err_open |
Line 58... | Line 70... | ||
58 | 70 | ||
59 | mov ecx,dword[open_b+32] ;+32 qword: размер файла в байтах |
71 | mov ecx,dword[open_b+32] ;+32 qword: à §¬¥à ä ©« ¢ ¡ ©â å |
60 | stdcall mem.Alloc,ecx ;выделяем память для изображения |
72 | stdcall mem.Alloc,ecx ;¢ë¤¥«ï¥¬ ¯ ¬ïâì ¤«ï ¨§®¡à ¦¥¨ï |
61 | mov [buf],eax |
73 | mov [buf],eax |
62 | mov [run_file_70.Function], SSF_READ_FILE |
74 | mov [run_file_70.Function], SSF_READ_FILE |
63 | mov [run_file_70.Position], 0 |
75 | mov [run_file_70.Position], 0 |
64 | mov [run_file_70.Flags], 0 |
76 | mov [run_file_70.Flags], 0 |
65 | mov [run_file_70.Count], ecx |
77 | mov [run_file_70.Count], ecx |
66 | mov [run_file_70.Buffer], eax |
78 | mov [run_file_70.Buffer], eax |
67 | mov byte[run_file_70+20], 0 |
79 | mov byte[run_file_70+20], 0 |
68 | mov [run_file_70.FileName], file_name |
80 | mov [run_file_70.FileName], file_name |
- | 81 | mcall SF_FILE,run_file_70 ;§ £à㦠¥¬ ä ©« ¨§®¡à ¦¥¨ï |
|
- | 82 | test eax,eax |
|
69 | mcall SF_FILE,run_file_70 ;загружаем файл изображения |
83 | jnz .err_open |
70 | cmp ebx,0xffffffff |
84 | cmp ebx,0xffffffff |
71 | je .end_open |
85 | je .end_open |
72 | ;определяем вид изображения и пишем его параметры |
86 | ;®¯à¥¤¥«ï¥¬ ¢¨¤ ¨§®¡à ¦¥¨ï ¨ ¯¨è¥¬ ¥£® ¯ à ¬¥âàë |
73 | stdcall [img_decode], [buf],ebx,0 |
87 | stdcall [img_decode], [buf],ebx,0 |
74 | mov ebx,eax |
88 | mov ebx,eax |
75 | ;определяем размер декодированного изображения |
89 | ;®¯à¥¤¥«ï¥¬ à §¬¥à ¤¥ª®¤¨à®¢ ®£® ¨§®¡à ¦¥¨ï |
76 | mov ecx,[eax+4] ;+4 = image width |
90 | mov ecx,[eax+4] ;+4 = image width |
77 | if img_w eq |
91 | if img_w eq |
78 | else |
92 | else |
79 | mov dword[img_w],ecx |
93 | mov dword[img_w],ecx |
Line 88... | Line 102... | ||
88 | if bytes_p_p eq |
102 | if bytes_p_p eq |
89 | imul ecx,3 ;need for r,g,b |
103 | imul ecx,3 ;need for r,g,b |
90 | else |
104 | else |
91 | imul ecx,bytes_p_p |
105 | imul ecx,bytes_p_p |
92 | end if |
106 | end if |
93 | stdcall mem.ReAlloc,[buf],ecx ;изменяем размер для буфера |
107 | stdcall mem.ReAlloc,[buf],ecx ;¨§¬¥ï¥¬ à §¬¥à ¤«ï ¡ãä¥à |
94 | mov [buf],eax |
108 | mov [buf],eax |
95 | stdcall [img_to_rgb2], ebx,[buf] ;преобразуем изображение к формату rgb |
109 | stdcall [img_to_rgb2], ebx,[buf] ;¯à¥®¡à §ã¥¬ ¨§®¡à ¦¥¨¥ ª ä®à¬ âã rgb |
96 | stdcall [img_destroy], ebx ;удаляем временный буфер с параметрами изображения |
110 | stdcall [img_destroy], ebx ;㤠«ï¥¬ ¢à¥¬¥ë© ¡ãä¥à á ¯ à ¬¥âà ¬¨ ¨§®¡à ¦¥¨ï |
- | 111 | jmp .end_open |
|
- | 112 | .err_open: |
|
- | 113 | add al,'0' |
|
- | 114 | mov byte[txt_err_img_file.n],al |
|
- | 115 | if path eqtype '' |
|
- | 116 | mov eax,dword[.path_str] |
|
- | 117 | mov dword[txt_err_img_file.f],eax |
|
- | 118 | mov eax,dword[.path_str+4] |
|
- | 119 | else |
|
- | 120 | mov eax,dword[path] |
|
- | 121 | mov dword[txt_err_img_file.f],eax |
|
- | 122 | mov eax,dword[path+4] |
|
- | 123 | end if |
|
- | 124 | mov dword[txt_err_img_file.f+4],eax |
|
- | 125 | mov byte[txt_err_img_file.f+7],0 |
|
- | 126 | notify_window_run txt_err_img_file |
|
97 | .end_open: |
127 | .end_open: |
98 | } |
128 | } |