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>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
<h1>Image transform 16.05.20</h1>
|
<h1>Image transform 26.05.20</h1>
|
||||||
|
|
||||||
<h2>Оглавление</h2>
|
<h2>Оглавление</h2>
|
||||||
<ul>
|
<ul>
|
||||||
<li>О программе</li>
|
<li>О программе</li>
|
||||||
<li>Панель инструментов</li>
|
<li>Панель инструментов</li>
|
||||||
<li>Клавиатура</Li>
|
<li>Клавиатура</li>
|
||||||
|
<li>Алгоритм работы программы</li>
|
||||||
<li>Автор</li>
|
<li>Автор</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
@ -62,7 +63,7 @@ table { font-size: 15px; }
|
|||||||
<p>Рис. 1. Внешний вид программы</p>
|
<p>Рис. 1. Внешний вид программы</p>
|
||||||
|
|
||||||
<p>Использование программы:</p>
|
<p>Использование программы:</p>
|
||||||
<p>Программу можно использовать для выравнивания искаженных изображений изаначально прямоугольной (квадратной) формы, для создания текстур и т.д. После открытия файла изображения нужно указать 4 точки, которые станут углами преобразованого изображения. Для выбора точки нужно навести курсор мыши в нужное место и нажать кнопку на клавиатуре цифру от 1 до 4, в зависимости от того какую точку нужно установить в выбранное место. Для более точной установки координат можно выделить точку нажатием на ней курсором мыши, а потом курсорами на клавиатуре двигать точку в нужное место.</p>
|
<p>Программу можно использовать для выравнивания искаженных изображений изначально прямоугольной (квадратной) формы, для создания текстур и т.д. После открытия файла изображения нужно указать 4 точки, которые станут углами преобразованного изображения. Для выбора точки нужно навести курсор мыши в нужное место и нажать на клавиатуре цифру от 1 до 4, в зависимости от того какую точку нужно установить в выбранное место. Также можно передвигать точки перетаскиванием мышей. Для более точной установки координат можно выделить точку нажатием на ней курсором мыши, а потом курсорами на клавиатуре двигать точку в нужное место.</p>
|
||||||
|
|
||||||
<p><img src="img_02.png"></p>
|
<p><img src="img_02.png"></p>
|
||||||
<p>Рис. 2. Окно с исходным изображением</p>
|
<p>Рис. 2. Окно с исходным изображением</p>
|
||||||
@ -83,6 +84,13 @@ table { font-size: 15px; }
|
|||||||
<p><b>1, 2, 3, 4</b> - установка координат указанной точки.</p>
|
<p><b>1, 2, 3, 4</b> - установка координат указанной точки.</p>
|
||||||
<p><b>↑</b>, <b>↓</b>, <b>←</b>, <b>→</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>
|
<h2>Автор</h2>
|
||||||
<p>IgorA</p>
|
<p>IgorA</p>
|
||||||
</body>
|
</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/libraries/libs-dev/libimg/libimg.inc'
|
||||||
include '../../../programs/develop/info3ds/info_fun_float.inc'
|
include '../../../programs/develop/info3ds/info_fun_float.inc'
|
||||||
|
|
||||||
txt_buf rb 8
|
|
||||||
|
|
||||||
@use_library_mem mem.Alloc,mem.Free,mem.ReAlloc,dll.Load
|
@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'
|
offs_zbuf_pbuf equ 24 ;const. from 'zbuffer.inc'
|
||||||
|
|
||||||
@ -201,7 +199,6 @@ pushad
|
|||||||
jmp .end2
|
jmp .end2
|
||||||
.end1:
|
.end1:
|
||||||
push buf_ogl
|
push buf_ogl
|
||||||
;call [kosglSwapBuffers]
|
|
||||||
.end2:
|
.end2:
|
||||||
stdcall [buf2d_bit_blt], buf_0, [nav_x],[nav_y] ;,...
|
stdcall [buf2d_bit_blt], buf_0, [nav_x],[nav_y] ;,...
|
||||||
|
|
||||||
@ -221,6 +218,13 @@ pushad
|
|||||||
stdcall convert_int_to_str, 16
|
stdcall convert_int_to_str, 16
|
||||||
stdcall str_cat, edi,ebx
|
stdcall str_cat, edi,ebx
|
||||||
stdcall str_cat, edi,txt_space ;§ ¢¥àè î騩 ¯à®¡¥«
|
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
|
mov byte[calc],0
|
||||||
.end0:
|
.end0:
|
||||||
; *** à¨á®¢ ¨¥ ¡ãä¥à ***
|
; *** à¨á®¢ ¨¥ ¡ãä¥à ***
|
||||||
@ -229,7 +233,11 @@ pushad
|
|||||||
mov ecx,[sc.work_text]
|
mov ecx,[sc.work_text]
|
||||||
or ecx,0x80000000 or (1 shl 30)
|
or ecx,0x80000000 or (1 shl 30)
|
||||||
mov edi,[sc.work] ;梥â ä® ®ª
|
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
|
popad
|
||||||
ret
|
ret
|
||||||
endp
|
endp
|
||||||
@ -491,13 +499,48 @@ popad
|
|||||||
ret
|
ret
|
||||||
|
|
||||||
align 4
|
align 4
|
||||||
proc mouse_left_u uses eax
|
proc mouse_left_u uses eax ebx
|
||||||
call buf_get_mouse_coord
|
call buf_get_mouse_coord
|
||||||
cmp eax,-1
|
cmp eax,-1
|
||||||
je .end0
|
je .end0
|
||||||
sub [mouse_down_x],eax
|
sub [mouse_down_x],eax
|
||||||
sub [mouse_down_y],ebx
|
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]
|
mov eax,[nav_y]
|
||||||
sub eax,[mouse_down_y]
|
sub eax,[mouse_down_y]
|
||||||
cmp eax,[nav_y_min]
|
cmp eax,[nav_y_min]
|
||||||
@ -521,9 +564,8 @@ proc mouse_left_u uses eax
|
|||||||
mov eax,[nav_x_max]
|
mov eax,[nav_x_max]
|
||||||
@@:
|
@@:
|
||||||
mov [nav_x],eax
|
mov [nav_x],eax
|
||||||
|
.end2:
|
||||||
mov byte[calc],1
|
mov byte[calc],1
|
||||||
|
|
||||||
.end0:
|
.end0:
|
||||||
ret
|
ret
|
||||||
endp
|
endp
|
||||||
@ -620,11 +662,6 @@ proc but_open_file
|
|||||||
mov dword[run_file_70.FileName], openfile_path
|
mov dword[run_file_70.FileName], openfile_path
|
||||||
mcall SF_FILE,run_file_70
|
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 ecx,dword[open_b+32] ;+32 qword: à §¬¥à ä ©« ¢ ¡ ©â å
|
||||||
mov [open_file_size],ecx
|
mov [open_file_size],ecx
|
||||||
stdcall mem.ReAlloc,[open_file_img],ecx ;¢ë¤¥«ï¥¬ ¯ ¬ïâì ¤«ï ¨§®¡à ¦¥¨ï
|
stdcall mem.ReAlloc,[open_file_img],ecx ;¢ë¤¥«ï¥¬ ¯ ¬ïâì ¤«ï ¨§®¡à ¦¥¨ï
|
||||||
@ -684,13 +721,22 @@ proc but_open_file
|
|||||||
jg @f
|
jg @f
|
||||||
mov eax,[ebx+4]
|
mov eax,[ebx+4]
|
||||||
@@:
|
@@:
|
||||||
mov ecx,eax
|
mov ecx,eax ;à §¬¥à ¯® x
|
||||||
mov edx,[ebx+8]
|
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_resize], edi, ecx,edx,1 ;¨§¬¥ï¥¬ à §¬¥àë ¡ãä¥à
|
||||||
|
stdcall [buf2d_clear], edi, buf2d_color
|
||||||
sub ecx,[ebx+4]
|
sub ecx,[ebx+4]
|
||||||
shr ecx,1
|
shr ecx,1
|
||||||
mov [buf_cop.l],cx
|
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:
|
.end_1:
|
||||||
|
|
||||||
;ᮧ¤ ¥¬ ¡ãä¥à ¤«ï ¯à¥®¡à §®¢ ®£® ¨§®¡à ¦¥¨ï
|
;ᮧ¤ ¥¬ ¡ãä¥à ¤«ï ¯à¥®¡à §®¢ ®£® ¨§®¡à ¦¥¨ï
|
||||||
@ -742,26 +788,11 @@ proc but_open_file
|
|||||||
stdcall [img_destroy], ebx
|
stdcall [img_destroy], ebx
|
||||||
|
|
||||||
movzx eax,word[buf_cop.l]
|
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
|
call calc_nav_params
|
||||||
xor eax,eax
|
stdcall nav_to_point, dword[sel_pt+point2d.x],dword[sel_pt+point2d.y]
|
||||||
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
|
|
||||||
@@:
|
|
||||||
mov byte[view_b],0
|
mov byte[view_b],0
|
||||||
mov dword[sel_act],-1 ;ᨬ ¥¬ ¢ë¤¥«¥¨¥ á â®ç¥ª
|
mov dword[sel_act],-1 ;ᨬ ¥¬ ¢ë¤¥«¥¨¥ á â®ç¥ª
|
||||||
mov byte[calc],1
|
mov byte[calc],1
|
||||||
@ -772,6 +803,51 @@ proc but_open_file
|
|||||||
ret
|
ret
|
||||||
endp
|
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
|
align 4
|
||||||
proc getNextPowerOfTwo uses ebx, n:dword
|
proc getNextPowerOfTwo uses ebx, n:dword
|
||||||
mov ebx,[n]
|
mov ebx,[n]
|
||||||
@ -1090,6 +1166,10 @@ if lang eq ru
|
|||||||
'ª®â®àë¥ áâ ãâ 㣫 ¬¨ ¯à¥®¡à §®¢ ®£® ¨§®¡à ¦¥¨ï." -tI',0
|
'ª®â®àë¥ áâ ãâ 㣫 ¬¨ ¯à¥®¡à §®¢ ®£® ¨§®¡à ¦¥¨ï." -tI',0
|
||||||
txt_pref db ' ¡ ',0,' Š¡',0,' Œ¡',0,' ƒ¡',0 ;¯à¨áâ ¢ª¨: ª¨«®, ¬¥£ , £¨£
|
txt_pref db ' ¡ ',0,' Š¡',0,' Œ¡',0,' ƒ¡',0 ;¯à¨áâ ¢ª¨: ª¨«®, ¬¥£ , £¨£
|
||||||
txt_f_size db '<27> §¬¥à: '
|
txt_f_size db '<27> §¬¥à: '
|
||||||
|
.size: rb 16
|
||||||
|
txt_img_w db '˜¨à¨ : '
|
||||||
|
.size: rb 16
|
||||||
|
txt_img_h db '‚ëá®â : '
|
||||||
else
|
else
|
||||||
txt_err_save_img_file db 'Can',39,'t save *.png file.',0
|
txt_err_save_img_file db 'Can',39,'t save *.png file.',0
|
||||||
txt_about db '"About',13,10,\
|
txt_about db '"About',13,10,\
|
||||||
@ -1098,6 +1178,10 @@ else
|
|||||||
'that will become the corners of the converted image." -tI',0
|
'that will become the corners of the converted image." -tI',0
|
||||||
txt_pref db ' b ',0,' Kb',0,' Mb',0,' Gb',0 ;¯à¨áâ ¢ª¨: ª¨«®, ¬¥£ , £¨£
|
txt_pref db ' b ',0,' Kb',0,' Mb',0,' Gb',0 ;¯à¨áâ ¢ª¨: ª¨«®, ¬¥£ , £¨£
|
||||||
txt_f_size db 'Size: '
|
txt_f_size db 'Size: '
|
||||||
|
.size: rb 16
|
||||||
|
txt_img_w db 'Width: '
|
||||||
|
.size: rb 16
|
||||||
|
txt_img_h db 'Height: '
|
||||||
end if
|
end if
|
||||||
.size: rb 16
|
.size: rb 16
|
||||||
|
|
||||||
@ -1283,7 +1367,7 @@ buf_0: dd 0
|
|||||||
.t: dw 35 ;+6 top
|
.t: dw 35 ;+6 top
|
||||||
.w: dd 6*64 ;+8 w
|
.w: dd 6*64 ;+8 w
|
||||||
.h: dd 7*64 ;+12 h
|
.h: dd 7*64 ;+12 h
|
||||||
.color: dd 0xffffff ;+16 color
|
.color: dd 0x808080 ;+16 color
|
||||||
db 24 ;+20 bit in pixel
|
db 24 ;+20 bit in pixel
|
||||||
|
|
||||||
align 4
|
align 4
|
||||||
@ -1333,6 +1417,7 @@ mouse_down_y dd ?
|
|||||||
sel_act dd ? ;â®çª ¢ë¡à ï ¤«ï । ªâ¨à®¢ ¨ï á ª« ¢¨ âãàë
|
sel_act dd ? ;â®çª ¢ë¡à ï ¤«ï । ªâ¨à®¢ ¨ï á ª« ¢¨ âãàë
|
||||||
sel_pt rb 8*sizeof.point2d ;â®çª¨ ¤«ï ¢ë¡®à 4-å 㣫®¢
|
sel_pt rb 8*sizeof.point2d ;â®çª¨ ¤«ï ¢ë¡®à 4-å 㣫®¢
|
||||||
last_time dd 0
|
last_time dd 0
|
||||||
|
txt_buf rb 8
|
||||||
procinfo process_information
|
procinfo process_information
|
||||||
sc system_colors
|
sc system_colors
|
||||||
run_file_70 FileInfoBlock
|
run_file_70 FileInfoBlock
|
||||||
|
@ -34,8 +34,8 @@ points_init:
|
|||||||
;настройка точек при открытии изображения
|
;настройка точек при открытии изображения
|
||||||
;(точки ставятся по углам изображения)
|
;(точки ставятся по углам изображения)
|
||||||
align 4
|
align 4
|
||||||
proc points_init_2 uses eax ecx edx edi, ot_x:dword
|
proc points_init_2 uses eax ecx edx edi, ot_x:dword, ot_y:dword
|
||||||
xor eax,eax
|
mov eax,[ot_y]
|
||||||
mov edi,sel_pt
|
mov edi,sel_pt
|
||||||
mov edx,[ot_x]
|
mov edx,[ot_x]
|
||||||
mov [edi+point2d.x],edx ;1
|
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
|
add edi,sizeof.point2d
|
||||||
mov [edi+point2d.x],ecx ;3
|
mov [edi+point2d.x],ecx ;3
|
||||||
mov ecx,[buf_i0.h]
|
mov ecx,[buf_i0.h]
|
||||||
|
sub ecx,eax
|
||||||
mov [edi+point2d.y],ecx ;3
|
mov [edi+point2d.y],ecx ;3
|
||||||
add edi,sizeof.point2d
|
add edi,sizeof.point2d
|
||||||
mov [edi+point2d.x],edx ;4
|
mov [edi+point2d.x],edx ;4
|
||||||
|
Loading…
Reference in New Issue
Block a user