update program

git-svn-id: svn://kolibrios.org@7986 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
IgorA 2020-05-26 09:00:49 +00:00
parent ba500c0f89
commit 7a7a049046
3 changed files with 134 additions and 40 deletions

View File

@ -45,13 +45,14 @@ table { font-size: 15px; }
</head>
<body>
<h1>Image transform 16.05.20</h1>
<h1>Image transform 26.05.20</h1>
<h2>Оглавление</h2>
<ul>
<li>О программе</li>
<li>Панель инструментов</li>
<li>Клавиатура</Li>
<li>Клавиатура</li>
<li>Алгоритм работы программы</li>
<li>Автор</li>
</ul>
@ -62,7 +63,7 @@ table { font-size: 15px; }
<p>Рис. 1. Внешний вид программы</p>
<p>Использование программы:</p>
<p>Программу можно использовать для выравнивания искаженных изображений изаначально прямоугольной (квадратной) формы, для создания текстур и т.д. После открытия файла изображения нужно указать 4 точки, которые станут углами преобразованого изображения. Для выбора точки нужно навести курсор мыши в нужное место и нажать кнопку на клавиатуре цифру от 1 до 4, в зависимости от того какую точку нужно установить в выбранное место. Для более точной установки координат можно выделить точку нажатием на ней курсором мыши, а потом курсорами на клавиатуре двигать точку в нужное место.</p>
<p>Программу можно использовать для выравнивания искаженных изображений изначально прямоугольной (квадратной) формы, для создания текстур и т.д. После открытия файла изображения нужно указать 4 точки, которые станут углами преобразованного изображения. Для выбора точки нужно навести курсор мыши в нужное место и нажать на клавиатуре цифру от 1 до 4, в зависимости от того какую точку нужно установить в выбранное место. Также можно передвигать точки перетаскиванием мышей. Для более точной установки координат можно выделить точку нажатием на ней курсором мыши, а потом курсорами на клавиатуре двигать точку в нужное место.</p>
<p><img src="img_02.png"></p>
<p>Рис. 2. Окно с исходным изображением</p>
@ -83,6 +84,13 @@ table { font-size: 15px; }
<p><b>1, 2, 3, 4</b> - установка координат указанной точки.</p>
<p><b>&uarr;</b>, <b>&darr;</b>, <b>&larr;</b>, <b>&rarr;</b> - навигация по изображению или пермещение выделенной точки.</p>
<h2>Алгоритм работы программы</h2>
<p>Открывается изображение и из него делается текстура для библиотеки TinyGL. (Если ширина изображения не кратна 2-м в какой-либо степени то оно дополняется пустыми полями с двух сторон до нужной ширины).
Пользователь задает 4 контрольные точки, 5-я точка вычисляется как среднее арифметическое от этих 4-х точек.
Вычисляются текстурные координаты для точек (в пределах от 0 до 1).
Рисуются 4 треугольника по выпрямленным координатам.
Если все устраивает можно сохранять полученное изображение.</p>
<h2>Автор</h2>
<p>IgorA</p>
</body>

View File

@ -12,10 +12,8 @@ include '../../../programs/develop/libraries/TinyGL/asm_fork/opengl_const.inc'
include '../../../programs/develop/libraries/libs-dev/libimg/libimg.inc'
include '../../../programs/develop/info3ds/info_fun_float.inc'
txt_buf rb 8
@use_library_mem mem.Alloc,mem.Free,mem.ReAlloc,dll.Load
caption db 'Image transform 16.05.20',0 ;¯®¤¯¨áì ®ª­ 
caption db 'Image transform 26.05.20',0 ;¯®¤¯¨áì ®ª­ 
offs_zbuf_pbuf equ 24 ;const. from 'zbuffer.inc'
@ -201,7 +199,6 @@ pushad
jmp .end2
.end1:
push buf_ogl
;call [kosglSwapBuffers]
.end2:
stdcall [buf2d_bit_blt], buf_0, [nav_x],[nav_y] ;,...
@ -221,6 +218,13 @@ pushad
stdcall convert_int_to_str, 16
stdcall str_cat, edi,ebx
stdcall str_cat, edi,txt_space ;§ ¢¥àè î騩 ¯à®¡¥«
;è¨à¨­  ¨ ¢ëá®â  ¨§®¡à ¦¥­¨ï
mov eax,[buf_i0.w]
mov edi,txt_img_w.size
stdcall convert_int_to_str, 16
mov eax,[buf_i0.h]
mov edi,txt_img_h.size
stdcall convert_int_to_str, 16
mov byte[calc],0
.end0:
; *** à¨á®¢ ­¨¥ ¡ãä¥à  ***
@ -229,7 +233,11 @@ pushad
mov ecx,[sc.work_text]
or ecx,0x80000000 or (1 shl 30)
mov edi,[sc.work] ;梥â ä®­  ®ª­ 
mcall SF_DRAW_TEXT,(275 shl 16)+7,,txt_f_size
mcall SF_DRAW_TEXT,(275 shl 16)+4,,txt_f_size
add ebx,9
mcall ,,,txt_img_w
add ebx,9
mcall ,,,txt_img_h
popad
ret
endp
@ -491,13 +499,48 @@ popad
ret
align 4
proc mouse_left_u uses eax
proc mouse_left_u uses eax ebx
call buf_get_mouse_coord
cmp eax,-1
je .end0
sub [mouse_down_x],eax
sub [mouse_down_y],ebx
cmp dword[sel_act],-1
je .end1
;¤¢¨£ ¥¬ â®çª¨
mov eax,[sel_act]
imul eax,sizeof.point2d
add eax,sel_pt
;coord x
mov ebx,dword[eax+point2d.x]
sub ebx,[mouse_down_x]
cmp ebx,0
jge @f
xor ebx,ebx
@@:
cmp ebx,[buf_i0.w]
jle @f
mov ebx,[buf_i0.w]
@@:
mov dword[eax+point2d.x],ebx
;coord y
mov ebx,dword[eax+point2d.y]
sub ebx,[mouse_down_y]
cmp ebx,0
jge @f
xor ebx,ebx
@@:
cmp ebx,[buf_i0.h]
jle @f
mov ebx,[buf_i0.h]
@@:
mov dword[eax+point2d.y],ebx
call points_update_prop
jmp .end2
.end1:
;¤¢¨£ ¥¬ ¨§®¡à ¦¥­¨¥
mov eax,[nav_y]
sub eax,[mouse_down_y]
cmp eax,[nav_y_min]
@ -521,9 +564,8 @@ proc mouse_left_u uses eax
mov eax,[nav_x_max]
@@:
mov [nav_x],eax
.end2:
mov byte[calc],1
.end0:
ret
endp
@ -620,11 +662,6 @@ proc but_open_file
mov dword[run_file_70.FileName], openfile_path
mcall SF_FILE,run_file_70
;mov eax,dword[open_b+32]
;mov edi,txt_buf
;stdcall convert_int_to_str,20
;notify_window_run txt_buf
mov ecx,dword[open_b+32] ;+32 qword: à §¬¥à ä ©«  ¢ ¡ ©â å
mov [open_file_size],ecx
stdcall mem.ReAlloc,[open_file_img],ecx ;¢ë¤¥«ï¥¬ ¯ ¬ïâì ¤«ï ¨§®¡à ¦¥­¨ï
@ -684,13 +721,22 @@ proc but_open_file
jg @f
mov eax,[ebx+4]
@@:
mov ecx,eax
mov edx,[ebx+8]
mov ecx,eax ;à §¬¥à ¯® x
stdcall getNextPowerOfTwo,[ebx+8]
cmp eax,[ebx+8]
jg @f
mov eax,[ebx+8]
@@:
mov edx,eax ;à §¬¥à ¯® y
stdcall [buf2d_resize], edi, ecx,edx,1 ;¨§¬¥­ï¥¬ à §¬¥àë ¡ãä¥à 
stdcall [buf2d_clear], edi, buf2d_color
sub ecx,[ebx+4]
shr ecx,1
mov [buf_cop.l],cx
stdcall [buf2d_bit_blt], edi, ecx,0, buf_cop
sub edx,[ebx+8]
shr edx,1
mov [buf_cop.t],dx
stdcall [buf2d_bit_blt], edi, ecx,edx, buf_cop
.end_1:
;ᮧ¤ ¥¬ ¡ãä¥à ¤«ï ¯à¥®¡à §®¢ ­­®£® ¨§®¡à ¦¥­¨ï
@ -742,26 +788,11 @@ proc but_open_file
stdcall [img_destroy], ebx
movzx eax,word[buf_cop.l]
stdcall points_init_2,eax
movzx ebx,word[buf_cop.t]
stdcall points_init_2,eax,ebx
call calc_nav_params
xor eax,eax
mov [nav_x],eax
mov ebx,[nav_x_max]
cmp ebx,0
jle @f
;¥á«¨ ¬ «¥­ìª®¥ ¨§®¡à ¦¥­¨¥ â® áâ ¢¨¬ ¯® 業âàã
shr ebx,1
mov [nav_x],ebx
@@:
mov [nav_y],eax
mov ebx,[nav_y_max]
cmp ebx,0
jle @f
;¥á«¨ ¬ «¥­ìª®¥ ¨§®¡à ¦¥­¨¥ â® áâ ¢¨¬ ¯® 業âàã
shr ebx,1
mov [nav_y],ebx
@@:
stdcall nav_to_point, dword[sel_pt+point2d.x],dword[sel_pt+point2d.y]
mov byte[view_b],0
mov dword[sel_act],-1 ;á­¨¬ ¥¬ ¢ë¤¥«¥­¨¥ á â®ç¥ª
mov byte[calc],1
@ -772,6 +803,51 @@ proc but_open_file
ret
endp
align 4
proc nav_to_point, coord_x:dword, coord_y:dword
;coord x
mov eax,[nav_x_max]
cmp eax,0
jle @f
;¥á«¨ ¬ «¥­ìª®¥ ¨§®¡à ¦¥­¨¥ â® áâ ¢¨¬ ¯® 業âàã
shr eax,1
jmp .end0
@@:
mov eax,[buf_0.w]
shr eax,1
sub eax,[coord_x]
cmp eax,[nav_x_min]
jge @f
mov eax,[nav_x_min]
@@:
cmp eax,[nav_x_max]
jle .end0
mov eax,[nav_x_max]
.end0:
mov [nav_x],eax
;coord y
mov eax,[nav_y_max]
cmp eax,0
jle @f
;¥á«¨ ¬ «¥­ìª®¥ ¨§®¡à ¦¥­¨¥ â® áâ ¢¨¬ ¯® 業âàã
shr eax,1
jmp .end1
@@:
mov eax,[buf_0.h]
shr eax,1
sub eax,[coord_y]
cmp eax,[nav_y_min]
jge @f
mov eax,[nav_y_min]
@@:
cmp eax,[nav_y_max]
jle .end1
mov eax,[nav_y_max]
.end1:
mov [nav_y],eax
ret
endp
align 4
proc getNextPowerOfTwo uses ebx, n:dword
mov ebx,[n]
@ -1090,6 +1166,10 @@ if lang eq ru
'ª®â®àë¥ áâ ­ãâ 㣫 ¬¨ ¯à¥®¡à §®¢ ­®£® ¨§®¡à ¦¥­¨ï." -tI',0
txt_pref db ' ¡ ',0,' Š¡',0,' Œ¡',0,' ƒ¡',0 ;¯à¨áâ ¢ª¨: ª¨«®, ¬¥£ , £¨£ 
txt_f_size db '<27> §¬¥à: '
.size: rb 16
txt_img_w db '˜¨à¨­ : '
.size: rb 16
txt_img_h db '‚ëá®â : '
else
txt_err_save_img_file db 'Can',39,'t save *.png file.',0
txt_about db '"About',13,10,\
@ -1098,6 +1178,10 @@ else
'that will become the corners of the converted image." -tI',0
txt_pref db ' b ',0,' Kb',0,' Mb',0,' Gb',0 ;¯à¨áâ ¢ª¨: ª¨«®, ¬¥£ , £¨£ 
txt_f_size db 'Size: '
.size: rb 16
txt_img_w db 'Width: '
.size: rb 16
txt_img_h db 'Height: '
end if
.size: rb 16
@ -1283,7 +1367,7 @@ buf_0: dd 0
.t: dw 35 ;+6 top
.w: dd 6*64 ;+8 w
.h: dd 7*64 ;+12 h
.color: dd 0xffffff ;+16 color
.color: dd 0x808080 ;+16 color
db 24 ;+20 bit in pixel
align 4
@ -1333,6 +1417,7 @@ mouse_down_y dd ?
sel_act dd ? ;â®çª  ¢ë¡à ­­ ï ¤«ï । ªâ¨à®¢ ­¨ï á ª« ¢¨ âãàë
sel_pt rb 8*sizeof.point2d ;â®çª¨ ¤«ï ¢ë¡®à  4-å 㣫®¢
last_time dd 0
txt_buf rb 8
procinfo process_information
sc system_colors
run_file_70 FileInfoBlock

View File

@ -34,8 +34,8 @@ points_init:
;настройка точек при открытии изображения
;(точки ставятся по углам изображения)
align 4
proc points_init_2 uses eax ecx edx edi, ot_x:dword
xor eax,eax
proc points_init_2 uses eax ecx edx edi, ot_x:dword, ot_y:dword
mov eax,[ot_y]
mov edi,sel_pt
mov edx,[ot_x]
mov [edi+point2d.x],edx ;1
@ -48,6 +48,7 @@ proc points_init_2 uses eax ecx edx edi, ot_x:dword
add edi,sizeof.point2d
mov [edi+point2d.x],ecx ;3
mov ecx,[buf_i0.h]
sub ecx,eax
mov [edi+point2d.y],ecx ;3
add edi,sizeof.point2d
mov [edi+point2d.x],edx ;4