forked from KolibriOS/kolibrios
update program
git-svn-id: svn://kolibrios.org@7986 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
ba500c0f89
commit
7a7a049046
@ -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>↑</b>, <b>↓</b>, <b>←</b>, <b>→</b> - навигация по изображению или пермещение выделенной точки.</p>
|
||||
|
||||
<h2>Алгоритм работы программы</h2>
|
||||
<p>Открывается изображение и из него делается текстура для библиотеки TinyGL. (Если ширина изображения не кратна 2-м в какой-либо степени то оно дополняется пустыми полями с двух сторон до нужной ширины).
|
||||
Пользователь задает 4 контрольные точки, 5-я точка вычисляется как среднее арифметическое от этих 4-х точек.
|
||||
Вычисляются текстурные координаты для точек (в пределах от 0 до 1).
|
||||
Рисуются 4 треугольника по выпрямленным координатам.
|
||||
Если все устраивает можно сохранять полученное изображение.</p>
|
||||
|
||||
<h2>Автор</h2>
|
||||
<p>IgorA</p>
|
||||
</body>
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user