forked from KolibriOS/kolibrios
rename 2 functions,
add new function 'exif_get_tag_id' git-svn-id: svn://kolibrios.org@6322 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
46c3e64a46
commit
174e0e1523
@ -10,7 +10,7 @@ include '../../../../load_img.inc'
|
|||||||
include '../../../../develop/libraries/box_lib/trunk/box_lib.mac'
|
include '../../../../develop/libraries/box_lib/trunk/box_lib.mac'
|
||||||
|
|
||||||
@use_library_mem mem.Alloc,mem.Free,mem.ReAlloc,dll.Load
|
@use_library_mem mem.Alloc,mem.Free,mem.ReAlloc,dll.Load
|
||||||
caption db '<27>à®á¬®âà ¨ä®à¬ 樨 Exif 10.03.16',0 ;¯®¤¯¨áì ®ª
|
caption db '<27>à®á¬®âà ¨ä®à¬ 樨 Exif 11.03.16',0 ;¯®¤¯¨áì ®ª
|
||||||
|
|
||||||
run_file_70 FileInfoBlock
|
run_file_70 FileInfoBlock
|
||||||
|
|
||||||
@ -268,7 +268,7 @@ pushad
|
|||||||
mov eax,1
|
mov eax,1
|
||||||
mov ebx,1
|
mov ebx,1
|
||||||
.cycle_0:
|
.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
|
stdcall [buf2d_draw_text], buf_0, buf_1,txt_buf,3,ebx,0xb0
|
||||||
inc eax
|
inc eax
|
||||||
add ebx,10
|
add ebx,10
|
||||||
@ -276,14 +276,14 @@ pushad
|
|||||||
jne .cycle_0
|
jne .cycle_0
|
||||||
|
|
||||||
;áç¨âë¢ ¥¬ ¤®ç¥à¨¥ ⥣¨ ¤«ï 0x8769
|
;áç¨âë¢ ¥¬ ¤®ç¥à¨¥ ⥣¨ ¤«ï 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
|
cmp dword[h_child],0
|
||||||
je .no_found_child
|
je .no_found_child
|
||||||
|
|
||||||
mov eax,1
|
mov eax,1
|
||||||
sub ebx,5
|
sub ebx,5
|
||||||
.cycle_1:
|
.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
|
stdcall [buf2d_draw_text], buf_0, buf_1,txt_buf,3,ebx,0xb00000
|
||||||
inc eax
|
inc eax
|
||||||
add ebx,10
|
add ebx,10
|
||||||
@ -314,7 +314,7 @@ pushad
|
|||||||
mov eax,1
|
mov eax,1
|
||||||
mov ebx,1
|
mov ebx,1
|
||||||
.cycle_0:
|
.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
|
stdcall [buf2d_draw_text], buf_0, buf_1,txt_buf,3,ebx,0xb0
|
||||||
inc eax
|
inc eax
|
||||||
add ebx,10
|
add ebx,10
|
||||||
@ -322,14 +322,14 @@ pushad
|
|||||||
jne .cycle_0
|
jne .cycle_0
|
||||||
|
|
||||||
;áç¨âë¢ ¥¬ ¤®ç¥à¨¥ ⥣¨ ¤«ï 0x8825
|
;áç¨âë¢ ¥¬ ¤®ç¥à¨¥ ⥣¨ ¤«ï 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
|
cmp dword[h_child],0
|
||||||
je .no_found_child
|
je .no_found_child
|
||||||
|
|
||||||
mov eax,1
|
mov eax,1
|
||||||
sub ebx,5
|
sub ebx,5
|
||||||
.cycle_1:
|
.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
|
stdcall [buf2d_draw_text], buf_0, buf_1,txt_buf,3,ebx,0xb00000
|
||||||
inc eax
|
inc eax
|
||||||
add ebx,10
|
add ebx,10
|
||||||
@ -360,7 +360,7 @@ pushad
|
|||||||
mov eax,1
|
mov eax,1
|
||||||
mov ebx,1
|
mov ebx,1
|
||||||
.cycle_0:
|
.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
|
stdcall [buf2d_draw_text], buf_0, buf_1,txt_buf,3,ebx,0xb0
|
||||||
inc eax
|
inc eax
|
||||||
add ebx,10
|
add ebx,10
|
||||||
@ -375,7 +375,7 @@ pushad
|
|||||||
mov eax,1 ;25
|
mov eax,1 ;25
|
||||||
sub ebx,5
|
sub ebx,5
|
||||||
.cycle_1:
|
.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
|
stdcall [buf2d_draw_text], buf_0, buf_1,txt_buf,3,ebx,0xb00000
|
||||||
inc eax
|
inc eax
|
||||||
add ebx,10
|
add ebx,10
|
||||||
@ -403,27 +403,42 @@ pushad
|
|||||||
cmp dword[open_file_size],0
|
cmp dword[open_file_size],0
|
||||||
je .open_file
|
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
|
; 室¨¬ app2
|
||||||
stdcall [exif_get_app2], h_app1,h_child
|
stdcall [exif_get_app2], h_app1,h_child
|
||||||
cmp dword[h_child],0
|
cmp dword[h_child],0
|
||||||
je .no_found_child
|
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
|
cmp dword[h_child],0
|
||||||
je .no_found_child
|
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
|
cmp dword[h_child_siz],0
|
||||||
je .no_found_child
|
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
|
cmp dword[h_child],0
|
||||||
je .no_found_child
|
je .no_found_child
|
||||||
|
|
||||||
;®¯à¥¤¥«ï¥¬ ¢¨¤ ¨§®¡à ¦¥¨ï ¨ ¯¥à¥¢®¤¨¬ ¥£® ¢® ¢à¥¬¥ë© ¡ãä¥à ebx
|
|
||||||
stdcall [img_decode],dword[h_child],dword[h_child_siz],0
|
stdcall [img_decode],dword[h_child],dword[h_child_siz],0
|
||||||
cmp dword[eax+4],1
|
cmp dword[eax+4],1
|
||||||
jl .no_found_child
|
jl .no_found_child
|
||||||
@ -433,15 +448,16 @@ pushad
|
|||||||
stdcall [buf2d_resize],buf_thumb,[eax+4],[eax+8],1
|
stdcall [buf2d_resize],buf_thumb,[eax+4],[eax+8],1
|
||||||
;¯à¥®¡à §ã¥¬ ¨§®¡à ¦¥¨¥ ª ä®à¬ âã rgb
|
;¯à¥®¡à §ã¥¬ ¨§®¡à ¦¥¨¥ ª ä®à¬ âã rgb
|
||||||
stdcall [img_to_rgb2],ebx,[buf_thumb]
|
stdcall [img_to_rgb2],ebx,[buf_thumb]
|
||||||
;㤠«ï¥¬ ¢à¥¬¥ë© ¡ãä¥à ebx
|
stdcall [img_destroy],ebx ;㤠«ï¥¬ ¢à¥¬¥ë© ¡ãä¥à ebx
|
||||||
stdcall [img_destroy],ebx
|
|
||||||
|
|
||||||
stdcall [buf2d_bit_blt], buf_0, 0,15, buf_thumb ;à¨á㥬 ¨§®¡à ¦¥¨¥
|
mov ebx,43
|
||||||
stdcall [buf2d_draw_text], buf_0, buf_1,txt_thumb,3,3,0xb000
|
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
|
jmp @f
|
||||||
|
|
||||||
.no_found_child:
|
.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
|
jmp @f
|
||||||
.open_file:
|
.open_file:
|
||||||
stdcall [buf2d_draw_text], buf_0, buf_1,txt_openfile,3,3,0xb000
|
stdcall [buf2d_draw_text], buf_0, buf_1,txt_openfile,3,3,0xb000
|
||||||
@ -475,10 +491,10 @@ if 0 ;
|
|||||||
cmp dword[h_child],0
|
cmp dword[h_child],0
|
||||||
je .end_save_file
|
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
|
cmp dword[h_child],0
|
||||||
je .end_save_file
|
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
|
cmp dword[h_child],0
|
||||||
je .end_save_file
|
je .end_save_file
|
||||||
|
|
||||||
@ -657,14 +673,18 @@ import_buf2d:
|
|||||||
align 4
|
align 4
|
||||||
import_exif: ;®¯¨á ¨¥ íªá¯®àâ¨à㥬ëå äãªæ¨©
|
import_exif: ;®¯¨á ¨¥ íªá¯®àâ¨à㥬ëå äãªæ¨©
|
||||||
exif_get_app1 dd sz_exif_get_app1
|
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_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
|
dd 0,0
|
||||||
sz_exif_get_app1 db 'exif_get_app1',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
|
||||||
|
|
||||||
|
|
||||||
sc system_colors
|
sc system_colors
|
||||||
|
|
||||||
|
@ -52,12 +52,13 @@ table { font-size: 15px; }
|
|||||||
<li><a href="#fun">Функции</a></li>
|
<li><a href="#fun">Функции</a></li>
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href="#f_1">exif_get_app1</a></li>
|
<li><a href="#f_1">exif_get_app1</a></li>
|
||||||
<li><a href="#f_2">exif_get_app1_tag</a></li>
|
<li><a href="#f_2">exif_get_tag</a></li>
|
||||||
<li><a href="#f_3">exif_get_app1_child</a></li>
|
<li><a href="#f_5">exif_get_tag_id</a></li>
|
||||||
|
<li><a href="#f_3">exif_get_child</a></li>
|
||||||
<li><a href="#f_4">exif_get_app2</a></li>
|
<li><a href="#f_4">exif_get_app2</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="#const">Константы для функции exif_get_app1_child</a></li>
|
<li><a href="#const">Константы для функции exif_get_child</a></li>
|
||||||
<li><a href="#tabl_e">Таблица экспорта</a></li>
|
<li><a href="#tabl_e">Таблица экспорта</a></li>
|
||||||
<li><a href="#hist">История</a></li>
|
<li><a href="#hist">История</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
@ -86,27 +87,38 @@ h_app1 rb 14</pre>
|
|||||||
<p>где open_file - указатель на данные файла изображения (пока поддерживаются только *.jpg и *.jpeg).</p>
|
<p>где open_file - указатель на данные файла изображения (пока поддерживаются только *.jpg и *.jpeg).</p>
|
||||||
<p>h_app1 - структура для запоминания начала Exif данных.</p>
|
<p>h_app1 - структура для запоминания начала Exif данных.</p>
|
||||||
|
|
||||||
<h4><a name="f_2">exif_get_app1_tag</a></h4>
|
<h4><a name="f_2">exif_get_tag</a></h4>
|
||||||
<p>Заполняет текстовую строку именем параметра из Exif и его значением. Пример:</p>
|
<p>Заполняет текстовую строку именем параметра из Exif и его значением. Пример:</p>
|
||||||
<pre>stdcall [exif_get_app1_tag], h_app1,3,txt_buf,80
|
<pre>stdcall [exif_get_tag], h_app1,3,txt_buf,80
|
||||||
...
|
...
|
||||||
h_app1 rb 14
|
h_app1 rb 14
|
||||||
txt_buf rb 80</pre>
|
txt_buf rb 80</pre>
|
||||||
<p>где h_app1 - структура заполенная в exif_get_app1 или в exif_get_app1_child.</p>
|
<p>где h_app1 - структура заполенная в exif_get_app1 или в exif_get_child.</p>
|
||||||
<p>3 - порядковый номер параметра.</p>
|
<p>3 - порядковый номер параметра.</p>
|
||||||
<p>txt_buf - текстовый буфер для заполнения.</p>
|
<p>txt_buf - текстовый буфер для заполнения.</p>
|
||||||
<p>80 - максимальная длина текста.</p>
|
<p>80 - максимальная длина текста.</p>
|
||||||
|
|
||||||
<h4><a name="f_3">exif_get_app1_child</a></h4>
|
<h4><a name="f_5">exif_get_tag_id</a></h4>
|
||||||
|
<p>Заполняет текстовую строку именем параметра из Exif и его значением. Пример:</p>
|
||||||
|
<pre>stdcall [exif_get_tag_id], h_app1,0x010f,txt_buf,80
|
||||||
|
...
|
||||||
|
h_app1 rb 14
|
||||||
|
txt_buf rb 80</pre>
|
||||||
|
<p>где h_app1 - структура заполенная в exif_get_app1 или в exif_get_child.</p>
|
||||||
|
<p>0x010f - код тега в котором содержится название производителя камеры.</p>
|
||||||
|
<p>txt_buf - текстовый буфер для заполнения.</p>
|
||||||
|
<p>80 - максимальная длина текста.</p>
|
||||||
|
|
||||||
|
<h4><a name="f_3">exif_get_child</a></h4>
|
||||||
<p>Есть простые теги с информацией а есть теги указывающие на списки других тегов. Эта функция берет указатель на начало списка дочерних тегов. Пример:</p>
|
<p>Есть простые теги с информацией а есть теги указывающие на списки других тегов. Эта функция берет указатель на начало списка дочерних тегов. Пример:</p>
|
||||||
<pre>stdcall [exif_get_app1_child], h_app1,h_child,0x8769
|
<pre>stdcall [exif_get_child], h_app1,h_child,0x8769
|
||||||
...
|
...
|
||||||
h_app1 rb 14
|
h_app1 rb 14
|
||||||
h_child rb 14</pre>
|
h_child rb 14</pre>
|
||||||
<p>где h_app1 - структура заполенная в exif_get_app1 или в exif_get_app1_child.</p>
|
<p>где h_app1 - структура заполенная в exif_get_app1 или в exif_get_child.</p>
|
||||||
<p>h_child - структура для заполения данных списка дочерних тегов.</p>
|
<p>h_child - структура для заполения данных списка дочерних тегов.</p>
|
||||||
<p>0x8769 - код тега (находящегося в списке тегов h_app1), который является указателем на список других дочерних тегов.</p>
|
<p>0x8769 - код тега (находящегося в списке тегов h_app1), который является указателем на список других дочерних тегов.</p>
|
||||||
<p>В даном примере функция берет тег 0x8769 и пытается найти его в списке h_app1, если находит то заполняет по нему значения в структуре h_child. Далее к списку h_child можно применять функцию exif_get_app1_tag для взятия значения этих тегов. С помощью этой функции мы как бы переходим внутрь некой "папки" с тегами, которые сразу достать не можем.</p>
|
<p>В даном примере функция берет тег 0x8769 и пытается найти его в списке h_app1, если находит то заполняет по нему значения в структуре h_child. Далее к списку h_child можно применять функцию exif_get_tag для взятия значения этих тегов. С помощью этой функции мы как бы переходим внутрь некой "папки" с тегами, которые сразу достать не можем.</p>
|
||||||
|
|
||||||
<h4><a name="f_4">exif_get_app2</a></h4>
|
<h4><a name="f_4">exif_get_app2</a></h4>
|
||||||
<p>Эта функция ищет начало данных Exif.app2. Если они найдены то заполняется структура app2. Если не найдены, то первый параметр в структуре делается равным 0. Пример:</p>
|
<p>Эта функция ищет начало данных Exif.app2. Если они найдены то заполняется структура app2. Если не найдены, то первый параметр в структуре делается равным 0. Пример:</p>
|
||||||
@ -117,8 +129,8 @@ h_app2 rb 14</pre>
|
|||||||
<p>где h_app1 - структура c данными Exif.app1, предварительно заполненная функцией exif_get_app1.</p>
|
<p>где h_app1 - структура c данными Exif.app1, предварительно заполненная функцией exif_get_app1.</p>
|
||||||
<p>h_app2 - структура для запоминания начала данных Exif.app2.</p>
|
<p>h_app2 - структура для запоминания начала данных Exif.app2.</p>
|
||||||
|
|
||||||
<h1><a name="const">Константы для функции exif_get_app1_child</a></h1>
|
<h1><a name="const">Константы для функции exif_get_child</a></h1>
|
||||||
<p>Здесь приведены некоторые константы, которые могут использоватся как 3-й параметр для функции exif_get_app1_child. Эти константы обозначают специальные теги, которые содержат смещение на дочерние параметры, которые находятся в Exif.</p>
|
<p>Здесь приведены некоторые константы, которые могут использоватся как 3-й параметр для функции exif_get_child. Эти константы обозначают специальные теги, которые содержат смещение на дочерние параметры, которые находятся в Exif.</p>
|
||||||
<h4>0x8769</h4>
|
<h4>0x8769</h4>
|
||||||
<p>Обозначает дополнительные параметры Exif.</p>
|
<p>Обозначает дополнительные параметры Exif.</p>
|
||||||
<h4>0x8825</h4>
|
<h4>0x8825</h4>
|
||||||
@ -129,17 +141,20 @@ h_app2 rb 14</pre>
|
|||||||
<pre>align 4
|
<pre>align 4
|
||||||
import_exif:
|
import_exif:
|
||||||
exif_get_app1 dd sz_exif_get_app1
|
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_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
|
dd 0,0
|
||||||
sz_exif_get_app1 db 'exif_get_app1',0
|
sz_exif_get_app1 db 'exif_get_app1',0
|
||||||
sz_exif_get_app1_tag db 'exif_get_app1_tag',0
|
sz_exif_get_app2 db 'exif_get_app2',0
|
||||||
sz_exif_get_app1_child db 'exif_get_app1_child',0
|
sz_exif_get_tag db 'exif_get_tag',0
|
||||||
sz_exif_get_app2 db 'exif_get_app2',0</pre>
|
sz_exif_get_tag_id db 'exif_get_tag_id',0
|
||||||
|
sz_exif_get_child db 'exif_get_child',0</pre>
|
||||||
|
|
||||||
<h1><a name="hist">История</a></h1>
|
<h1><a name="hist">История</a></h1>
|
||||||
<p>15.07.14 - первая версия библиотеки, пример использования.</p>
|
<p>15.07.14 - первая версия библиотеки, пример использования.</p>
|
||||||
<p>23.07.14 - добавлена функция exif_get_app2.</p>
|
<p>23.07.14 - добавлена функция exif_get_app2.</p>
|
||||||
|
<p>11.03.16 - добавлена функция exif_get_tag_id, изменены названия некоторых функций (убрано app1 потому что они могут работать не только с app1).</p>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
@ -928,8 +928,10 @@ endp
|
|||||||
; num - ¯®à浪®¢ë© ®¬¥à ⥣ ( ç¨ ¥âáï á 1)
|
; num - ¯®à浪®¢ë© ®¬¥à ⥣ ( ç¨ ¥âáï á 1)
|
||||||
; txt - 㪠§ ⥫ì ⥪áâ, ªã¤ ¡ã¤¥â § ¯¨á ® § 票¥
|
; txt - 㪠§ ⥫ì ⥪áâ, ªã¤ ¡ã¤¥â § ¯¨á ® § 票¥
|
||||||
; t_max - ¬ ªá¨¬ «ìë© à §¬¥à ⥪áâ
|
; t_max - ¬ ªá¨¬ «ìë© à §¬¥à ⥪áâ
|
||||||
|
;output:
|
||||||
|
; txt - § ¯®«ï¥âáï ⥪á⮬ ¢ ¢¨¤¥ "¯ à ¬¥âà: § 票¥", ¥á«¨ ¥ ©¤¥® â® ¯ãáâ ï áâப
|
||||||
align 4
|
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
|
pushad
|
||||||
mov eax,[app1]
|
mov eax,[app1]
|
||||||
mov edi,[txt]
|
mov edi,[txt]
|
||||||
@ -967,6 +969,55 @@ popad
|
|||||||
ret
|
ret
|
||||||
endp
|
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:
|
;input:
|
||||||
; app1 - 㪠§ ⥫ì exif.app1 ¨«¨ exif.app1.child
|
; app1 - 㪠§ ⥫ì exif.app1 ¨«¨ exif.app1.child
|
||||||
; child - 㪠§ â¥«ì ¤«ï § ¯®«¥¨ï ç « ¤®ç¥à¨å ⥣®¢ exif.app1.child
|
; child - 㪠§ â¥«ì ¤«ï § ¯®«¥¨ï ç « ¤®ç¥à¨å ⥣®¢ exif.app1.child
|
||||||
@ -974,7 +1025,7 @@ endp
|
|||||||
;output:
|
;output:
|
||||||
; child - 㪠§ ⥫ì ç «® ¤®ç¥à¨å ⥣®¢
|
; child - 㪠§ ⥫ì ç «® ¤®ç¥à¨å ⥣®¢
|
||||||
align 4
|
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
|
pushad
|
||||||
mov eax,[app1]
|
mov eax,[app1]
|
||||||
mov edi,[child]
|
mov edi,[child]
|
||||||
@ -1106,11 +1157,11 @@ pushad
|
|||||||
|
|
||||||
.suport:
|
.suport:
|
||||||
; 室¨¬ ⥣ 0x8769 (à áè¨à¥ë¥ ¤ ë¥ ¯® Exif)
|
; 室¨¬ ⥣ 0x8769 (à áè¨à¥ë¥ ¤ ë¥ ¯® Exif)
|
||||||
stdcall exif_get_app1_child, eax,edi,0x8769
|
stdcall exif_get_child, eax,edi,0x8769
|
||||||
cmp dword[edi],0
|
cmp dword[edi],0
|
||||||
je .no_suport
|
je .no_suport
|
||||||
; 室¨¬ ⥣ 0x927c (¤ ë¥ Maker ¯® ª ¬¥à¥)
|
; 室¨¬ ⥣ 0x927c (¤ ë¥ Maker ¯® ª ¬¥à¥)
|
||||||
stdcall exif_get_app1_child, edi,edi, 0x927c
|
stdcall exif_get_child, edi,edi, 0x927c
|
||||||
cmp dword[edi],0
|
cmp dword[edi],0
|
||||||
je .no_suport
|
je .no_suport
|
||||||
|
|
||||||
@ -1673,11 +1724,14 @@ align 4
|
|||||||
align 16
|
align 16
|
||||||
EXPORTS:
|
EXPORTS:
|
||||||
dd sz_exif_get_app1, exif_get_app1
|
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_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
|
dd 0,0
|
||||||
sz_exif_get_app1 db 'exif_get_app1',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
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user