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; }
  • Функции
  • -
  • Константы для функции exif_get_app1_child
  • +
  • Константы для функции exif_get_child
  • Таблица экспорта
  • История
  • @@ -86,27 +87,38 @@ h_app1 rb 14

    где open_file - указатель на данные файла изображения (пока поддерживаются только *.jpg и *.jpeg).

    h_app1 - структура для запоминания начала Exif данных.

    -

    exif_get_app1_tag

    +

    exif_get_tag

    Заполняет текстовую строку именем параметра из 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).

    \ No newline at end of file diff --git a/programs/develop/libraries/exif/trunk/exif.asm b/programs/develop/libraries/exif/trunk/exif.asm index 8a5d3f342b..450dd9f336 100644 --- a/programs/develop/libraries/exif/trunk/exif.asm +++ b/programs/develop/libraries/exif/trunk/exif.asm @@ -928,8 +928,10 @@ endp ; num - Ї®ап¤Є®ўл© ­®¬Ґа ⥣  (­ зЁ­ Ґвбп б 1) ; txt - гЄ § вҐ«м ­  ⥪бв, Єг¤  Ўг¤Ґв § ЇЁб ­® §­ зҐ­ЁҐ ; t_max - ¬ ЄбЁ¬ «м­л© а §¬Ґа ⥪бв  +;output: +; txt - § Ї®«­пҐвбп ⥪б⮬ ў ўЁ¤Ґ "Ї а ¬Ґва: §­ зҐ­ЁҐ", Ґб«Ё ­Ґ ­ ©¤Ґ­® в® Їгбв п бва®Є  align 4 -proc exif_get_app1_tag, app1:dword, num:dword, txt:dword, t_max:dword +proc exif_get_tag, app1:dword, num:dword, txt:dword, t_max:dword pushad mov eax,[app1] mov edi,[txt] @@ -967,6 +969,55 @@ popad ret endp +;input: +; app1 - гЄ § вҐ«м ­  ­ з «® exif.app1 +; id - Ё¤Ґ­вЁдЁЄ в®а ⥣  §­ зҐ­ЁҐ Є®в®а®Ј® ­г¦­® ­ ©вЁ +; txt - гЄ § вҐ«м ­  ⥪бв, Єг¤  Ўг¤Ґв § ЇЁб ­® §­ зҐ­ЁҐ +; t_max - ¬ ЄбЁ¬ «м­л© а §¬Ґа ⥪бв  +;output: +; txt - § Ї®«­пҐвбп ⥪б⮬ ў ўЁ¤Ґ "Ї а ¬Ґва: §­ зҐ­ЁҐ", Ґб«Ё ­Ґ ­ ©¤Ґ­® в® Їгбв п бва®Є  +align 4 +proc exif_get_tag_id, app1:dword, id:dword, txt:dword, t_max:dword +pushad + mov eax,[app1] + mov edi,[txt] + + xor edx,edx + mov byte[edi],dl + cmp [eax],edx + je .end_f ;Ґб«Ё ­Ґ ­ ©¤Ґ­ гЄ § вҐ«м ­  ­ з «® exif.app1 + + mov ebx,[id] + movzx edx,word[eax+offs_m_or_i] ;if 'MM' edx=1 + bt edx,0 + jnc @f + ror bx,8 + @@: + + ;ЎҐаҐ¬ зЁб«® ⥣®ў + mov eax,[eax] + movzx ecx,word[eax] + bt edx,0 + jnc @f + ror cx,8 + @@: + ;ў ecx - зЁб«® ⥣®ў + + ;ЁйҐ¬ § ¤ ­­л© ⥣ + add eax,offs_tag_0 + .cycle_0: + cmp word[eax],bx ;word[eax+0] - Є®¤ ⥣  + je @f + add eax,tag_size + loop .cycle_0 + jmp .end_f + @@: + stdcall read_tag_value,[app1],[t_max] + .end_f: +popad + ret +endp + ;input: ; app1 - гЄ § вҐ«м ­  exif.app1 Ё«Ё ­  exif.app1.child ; child - гЄ § вҐ«м ¤«п § Ї®«­Ґ­Ёп ­ з «  ¤®зҐа­Ёе ⥣®ў exif.app1.child @@ -974,7 +1025,7 @@ endp ;output: ; child - гЄ § вҐ«м ­  ­ з «® ¤®зҐа­Ёе ⥣®ў align 4 -proc exif_get_app1_child, app1:dword, child:dword , c_tag:dword +proc exif_get_child, app1:dword, child:dword , c_tag:dword pushad mov eax,[app1] mov edi,[child] @@ -1106,11 +1157,11 @@ pushad .suport: ;­ е®¤Ё¬ ⥣ 0x8769 (а биЁаҐ­­лҐ ¤ ­­лҐ Ї® Exif) - stdcall exif_get_app1_child, eax,edi,0x8769 + stdcall exif_get_child, eax,edi,0x8769 cmp dword[edi],0 je .no_suport ;­ е®¤Ё¬ ⥣ 0x927c (¤ ­­лҐ Maker Ї® Є ¬ҐаҐ) - stdcall exif_get_app1_child, edi,edi, 0x927c + stdcall exif_get_child, edi,edi, 0x927c cmp dword[edi],0 je .no_suport @@ -1673,11 +1724,14 @@ align 4 align 16 EXPORTS: dd sz_exif_get_app1, exif_get_app1 - dd sz_exif_get_app1_tag, exif_get_app1_tag - dd sz_exif_get_app1_child, exif_get_app1_child dd sz_exif_get_app2, exif_get_app2 + dd sz_exif_get_tag, exif_get_tag + dd sz_exif_get_tag_id, exif_get_tag_id + dd sz_exif_get_child, 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 +