diff --git a/programs/develop/libraries/exif/examples/viev_exif.asm b/programs/develop/libraries/exif/examples/viev_exif.asm index 24382a97e1..cb4f3d4ff3 100644 --- a/programs/develop/libraries/exif/examples/viev_exif.asm +++ b/programs/develop/libraries/exif/examples/viev_exif.asm @@ -10,7 +10,7 @@ include '../../../../load_img.inc' include '../../../../develop/libraries/box_lib/trunk/box_lib.mac' @use_library_mem mem.Alloc,mem.Free,mem.ReAlloc,dll.Load -caption db 'Џа®б¬®ва Ёд®а¬ жЁЁ Exif 10.03.16',0 ;Ї®¤ЇЁбм ®Є +caption db 'Џа®б¬®ва Ёд®а¬ жЁЁ Exif 11.03.16',0 ;Ї®¤ЇЁбм ®Є run_file_70 FileInfoBlock @@ -268,7 +268,7 @@ pushad mov eax,1 mov ebx,1 .cycle_0: - stdcall [exif_get_app1_tag], h_app1,eax,txt_buf,80 + stdcall [exif_get_tag], h_app1,eax,txt_buf,80 stdcall [buf2d_draw_text], buf_0, buf_1,txt_buf,3,ebx,0xb0 inc eax add ebx,10 @@ -276,14 +276,14 @@ pushad jne .cycle_0 ;бзЁвлў Ґ¬ ¤®зҐаЁҐ ⥣Ё ¤«п 0x8769 - stdcall [exif_get_app1_child], h_app1,h_child,0x8769 + stdcall [exif_get_child], h_app1,h_child,0x8769 cmp dword[h_child],0 je .no_found_child mov eax,1 sub ebx,5 .cycle_1: - stdcall [exif_get_app1_tag], h_child,eax,txt_buf,80 + stdcall [exif_get_tag], h_child,eax,txt_buf,80 stdcall [buf2d_draw_text], buf_0, buf_1,txt_buf,3,ebx,0xb00000 inc eax add ebx,10 @@ -314,7 +314,7 @@ pushad mov eax,1 mov ebx,1 .cycle_0: - stdcall [exif_get_app1_tag], h_app1,eax,txt_buf,80 + stdcall [exif_get_tag], h_app1,eax,txt_buf,80 stdcall [buf2d_draw_text], buf_0, buf_1,txt_buf,3,ebx,0xb0 inc eax add ebx,10 @@ -322,14 +322,14 @@ pushad jne .cycle_0 ;бзЁвлў Ґ¬ ¤®зҐаЁҐ ⥣Ё ¤«п 0x8825 - stdcall [exif_get_app1_child], h_app1,h_child,0x8825 + stdcall [exif_get_child], h_app1,h_child,0x8825 cmp dword[h_child],0 je .no_found_child mov eax,1 sub ebx,5 .cycle_1: - stdcall [exif_get_app1_tag], h_child,eax,txt_buf,80 + stdcall [exif_get_tag], h_child,eax,txt_buf,80 stdcall [buf2d_draw_text], buf_0, buf_1,txt_buf,3,ebx,0xb00000 inc eax add ebx,10 @@ -360,7 +360,7 @@ pushad mov eax,1 mov ebx,1 .cycle_0: - stdcall [exif_get_app1_tag], h_app1,eax,txt_buf,80 + stdcall [exif_get_tag], h_app1,eax,txt_buf,80 stdcall [buf2d_draw_text], buf_0, buf_1,txt_buf,3,ebx,0xb0 inc eax add ebx,10 @@ -375,7 +375,7 @@ pushad mov eax,1 ;25 sub ebx,5 .cycle_1: - stdcall [exif_get_app1_tag], h_child,eax,txt_buf,80 + stdcall [exif_get_tag], h_child,eax,txt_buf,80 stdcall [buf2d_draw_text], buf_0, buf_1,txt_buf,3,ebx,0xb00000 inc eax add ebx,10 @@ -403,27 +403,42 @@ pushad cmp dword[open_file_size],0 je .open_file - mov eax,1 - mov ebx,1 + ;ўлў®¤Ё¬ ®Ўйго Ёд®а¬ жЁо Ї® бЁ¬Єг: + ;0x010f - Manufacturer of digicam + ;0x0110 - Model + ;0x0132 - Modify date + mov ebx,3 + stdcall [exif_get_tag_id], h_app1,0x010f,txt_buf,80 + stdcall [buf2d_draw_text], buf_0, buf_1,txt_buf,3,ebx,0xb0 + add ebx,10 + stdcall [exif_get_tag_id], h_app1,0x0110,txt_buf,80 + stdcall [buf2d_draw_text], buf_0, buf_1,txt_buf,3,ebx,0xb0 + add ebx,10 + stdcall [exif_get_tag_id], h_app1,0x0132,txt_buf,80 + stdcall [buf2d_draw_text], buf_0, buf_1,txt_buf,3,ebx,0xb0 + add ebx,20 ; 室Ё¬ app2 stdcall [exif_get_app2], h_app1,h_child cmp dword[h_child],0 je .no_found_child + ;бзЁвлў Ґ¬ ¤®зҐаЁҐ ⥣Ё - stdcall [exif_get_app1_child], h_child,h_child,0x0011 + ;0x0011 - Preview IFD + stdcall [exif_get_child], h_child,h_child,0x0011 cmp dword[h_child],0 je .no_found_child - stdcall [exif_get_app1_child], h_child,h_child_siz,0x0202 + ;0x0202 - Preview Image Length + stdcall [exif_get_child], h_child,h_child_siz,0x0202 cmp dword[h_child_siz],0 je .no_found_child - stdcall [exif_get_app1_child], h_child,h_child,0x0201 + ;0x0201 - Preview Image Start + stdcall [exif_get_child], h_child,h_child,0x0201 cmp dword[h_child],0 je .no_found_child - ;®ЇаҐ¤Ґ«пҐ¬ ўЁ¤ Ё§®Ўа ¦ҐЁп Ё ЇҐаҐў®¤Ё¬ ҐЈ® ў® ўаҐ¬Ґл© ЎгдҐа ebx stdcall [img_decode],dword[h_child],dword[h_child_siz],0 cmp dword[eax+4],1 jl .no_found_child @@ -433,15 +448,16 @@ pushad stdcall [buf2d_resize],buf_thumb,[eax+4],[eax+8],1 ;ЇаҐ®Ўа §гҐ¬ Ё§®Ўа ¦ҐЁҐ Є д®а¬ вг rgb stdcall [img_to_rgb2],ebx,[buf_thumb] - ;г¤ «пҐ¬ ўаҐ¬Ґл© ЎгдҐа ebx - stdcall [img_destroy],ebx + stdcall [img_destroy],ebx ;г¤ «пҐ¬ ўаҐ¬Ґл© ЎгдҐа ebx - stdcall [buf2d_bit_blt], buf_0, 0,15, buf_thumb ;аЁб㥬 Ё§®Ўа ¦ҐЁҐ - stdcall [buf2d_draw_text], buf_0, buf_1,txt_thumb,3,3,0xb000 + mov ebx,43 + stdcall [buf2d_draw_text], buf_0, buf_1,txt_thumb,3,ebx,0xb000 + add ebx,10 + stdcall [buf2d_bit_blt], buf_0, 0,ebx, buf_thumb ;аЁб㥬 Ё§®Ўа ¦ҐЁҐ jmp @f .no_found_child: - stdcall [buf2d_draw_text], buf_0, buf_1,txt_nochild,3,3,0xb000 + stdcall [buf2d_draw_text], buf_0, buf_1,txt_nochild,3,ebx,0xb000 jmp @f .open_file: stdcall [buf2d_draw_text], buf_0, buf_1,txt_openfile,3,3,0xb000 @@ -475,10 +491,10 @@ if 0 ; cmp dword[h_child],0 je .end_save_file ;бзЁвлў Ґ¬ ¤®зҐаЁҐ ⥣Ё - stdcall [exif_get_app1_child], h_child,h_child,0x0011 + stdcall [exif_get_child], h_child,h_child,0x0011 cmp dword[h_child],0 je .end_save_file - stdcall [exif_get_app1_child], h_child,h_child,0x0201 + stdcall [exif_get_child], h_child,h_child,0x0201 cmp dword[h_child],0 je .end_save_file @@ -657,14 +673,18 @@ import_buf2d: align 4 import_exif: ;®ЇЁб ЁҐ нЄбЇ®авЁа㥬ле дгЄжЁ© exif_get_app1 dd sz_exif_get_app1 - exif_get_app1_tag dd sz_exif_get_app1_tag - exif_get_app1_child dd sz_exif_get_app1_child exif_get_app2 dd sz_exif_get_app2 + exif_get_tag dd sz_exif_get_tag + exif_get_tag_id dd sz_exif_get_tag_id + exif_get_child dd sz_exif_get_child + dd 0,0 sz_exif_get_app1 db 'exif_get_app1',0 - sz_exif_get_app1_tag db 'exif_get_app1_tag',0 - sz_exif_get_app1_child db 'exif_get_app1_child',0 sz_exif_get_app2 db 'exif_get_app2',0 + sz_exif_get_tag db 'exif_get_tag',0 + sz_exif_get_tag_id db 'exif_get_tag_id',0 + sz_exif_get_child db 'exif_get_child',0 + sc system_colors diff --git a/programs/develop/libraries/exif/trunk/about.htm b/programs/develop/libraries/exif/trunk/about.htm index 0e1bf9e61f..2d8ea383f6 100644 --- a/programs/develop/libraries/exif/trunk/about.htm +++ b/programs/develop/libraries/exif/trunk/about.htm @@ -52,12 +52,13 @@ table { font-size: 15px; }
где open_file - указатель на данные файла изображения (пока поддерживаются только *.jpg и *.jpeg).
h_app1 - структура для запоминания начала Exif данных.
-Заполняет текстовую строку именем параметра из Exif и его значением. Пример:
-stdcall [exif_get_app1_tag], h_app1,3,txt_buf,80 +stdcall [exif_get_tag], h_app1,3,txt_buf,80 ... h_app1 rb 14 txt_buf rb 80-где h_app1 - структура заполенная в exif_get_app1 или в exif_get_app1_child.
+где h_app1 - структура заполенная в exif_get_app1 или в exif_get_child.
3 - порядковый номер параметра.
txt_buf - текстовый буфер для заполнения.
80 - максимальная длина текста.
-exif_get_app1_child
+exif_get_tag_id
+Заполняет текстовую строку именем параметра из Exif и его значением. Пример:
+stdcall [exif_get_tag_id], h_app1,0x010f,txt_buf,80 +... +h_app1 rb 14 +txt_buf rb 80+где h_app1 - структура заполенная в exif_get_app1 или в exif_get_child.
+0x010f - код тега в котором содержится название производителя камеры.
+txt_buf - текстовый буфер для заполнения.
+80 - максимальная длина текста.
+ +exif_get_child
Есть простые теги с информацией а есть теги указывающие на списки других тегов. Эта функция берет указатель на начало списка дочерних тегов. Пример:
-stdcall [exif_get_app1_child], h_app1,h_child,0x8769 +stdcall [exif_get_child], h_app1,h_child,0x8769 ... h_app1 rb 14 h_child rb 14-где h_app1 - структура заполенная в exif_get_app1 или в exif_get_app1_child.
+где h_app1 - структура заполенная в exif_get_app1 или в exif_get_child.
h_child - структура для заполения данных списка дочерних тегов.
0x8769 - код тега (находящегося в списке тегов h_app1), который является указателем на список других дочерних тегов.
-В даном примере функция берет тег 0x8769 и пытается найти его в списке h_app1, если находит то заполняет по нему значения в структуре h_child. Далее к списку h_child можно применять функцию exif_get_app1_tag для взятия значения этих тегов. С помощью этой функции мы как бы переходим внутрь некой "папки" с тегами, которые сразу достать не можем.
+В даном примере функция берет тег 0x8769 и пытается найти его в списке h_app1, если находит то заполняет по нему значения в структуре h_child. Далее к списку h_child можно применять функцию exif_get_tag для взятия значения этих тегов. С помощью этой функции мы как бы переходим внутрь некой "папки" с тегами, которые сразу достать не можем.
exif_get_app2
Эта функция ищет начало данных Exif.app2. Если они найдены то заполняется структура app2. Если не найдены, то первый параметр в структуре делается равным 0. Пример:
@@ -117,8 +129,8 @@ h_app2 rb 14где h_app1 - структура c данными Exif.app1, предварительно заполненная функцией exif_get_app1.
h_app2 - структура для запоминания начала данных Exif.app2.
-Константы для функции exif_get_app1_child
-Здесь приведены некоторые константы, которые могут использоватся как 3-й параметр для функции exif_get_app1_child. Эти константы обозначают специальные теги, которые содержат смещение на дочерние параметры, которые находятся в Exif.
+Константы для функции exif_get_child
+Здесь приведены некоторые константы, которые могут использоватся как 3-й параметр для функции exif_get_child. Эти константы обозначают специальные теги, которые содержат смещение на дочерние параметры, которые находятся в Exif.
0x8769
Обозначает дополнительные параметры Exif.
0x8825
@@ -129,17 +141,20 @@ h_app2 rb 14
align 4 import_exif: exif_get_app1 dd sz_exif_get_app1 - exif_get_app1_tag dd sz_exif_get_app1_tag - exif_get_app1_child dd sz_exif_get_app1_child exif_get_app2 dd sz_exif_get_app2 + exif_get_tag dd sz_exif_get_tag + exif_get_tag_id dd sz_exif_get_tag_id + exif_get_child dd sz_exif_get_child dd 0,0 sz_exif_get_app1 db 'exif_get_app1',0 - sz_exif_get_app1_tag db 'exif_get_app1_tag',0 - sz_exif_get_app1_child db 'exif_get_app1_child',0 - sz_exif_get_app2 db 'exif_get_app2',0+ sz_exif_get_app2 db 'exif_get_app2',0 + sz_exif_get_tag db 'exif_get_tag',0 + sz_exif_get_tag_id db 'exif_get_tag_id',0 + sz_exif_get_child db 'exif_get_child',0
15.07.14 - первая версия библиотеки, пример использования.
23.07.14 - добавлена функция exif_get_app2.
+11.03.16 - добавлена функция exif_get_tag_id, изменены названия некоторых функций (убрано app1 потому что они могут работать не только с app1).