├── .gitignore ├── README.md ├── Release ├── alpha.bat ├── bin.bmp ├── bin.jpg ├── bin.png ├── bin2.bmp ├── button1.bmp ├── button2.bmp ├── changetarget.bat ├── cmd.exe ├── fps.bat ├── full.bat ├── image.dll ├── image.exp ├── image.iobj ├── image.ipdb ├── image.lib ├── image.pdb ├── init.dll ├── list.bat ├── mouse.bat ├── mouse2.bat ├── mouse_dbg.bat ├── pen.bat ├── prtsc.bat ├── regiontreecut.bat ├── rotate.bat ├── run.bat ├── save.bat ├── screen.bmp ├── test.txt ├── test2.txt ├── th1.bat ├── th2.bat ├── thread.bat ├── x.bat └── x.txt ├── image.sln └── image ├── Release ├── image.Build.CppClean.log ├── image.log ├── image.obj ├── image.tlog │ ├── CL.command.1.tlog │ ├── CL.read.1.tlog │ ├── CL.write.1.tlog │ ├── image.lastbuildstate │ ├── image.write.1u.tlog │ ├── link.command.1.tlog │ ├── link.read.1.tlog │ └── link.write.1.tlog └── vc141.pdb ├── image.cpp ├── image.vcxproj ├── image.vcxproj.filters ├── image.vcxproj.user ├── keydef.hpp ├── region.hpp └── regionmgr.cpp /.gitignore: -------------------------------------------------------------------------------- 1 | *.exp 2 | *.iobj 3 | *.ipdb 4 | *.lib 5 | *.obj 6 | *.pdb 7 | *.log 8 | *.tlog 9 | *.lastbuildstate 10 | \image\Release\ -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Image 2 | 3 | 请转至由gtr-0000维护的[可用版本](https://github.com/gtr-0000/image) 4 | 5 | 关于本文档 6 | ---------- 7 | 8 | 作者:bbaa -Te Studio 9 | 10 | 文档修改时间:2018-7-7 11 | 12 | image基础文件说明 13 | ----------------- 14 | 15 | ### 2.1 cmd.exe 16 | 17 | 修改版Cmd 用于加载Image.dll 18 | 19 | ### 2.2 init.dll 20 | 21 | 加载同目录下的所有Dll 22 | 23 | ### 2.3 image.dll 24 | 25 | image3.0模块核心 26 | 27 | ### Github项目地址 28 | 29 | [[https://github.com/Byaidu/image/]{.underline}](https://github.com/Byaidu/image/) 30 | 31 | 基础语法 32 | -------- 33 | 34 | 3.1 调用方法 35 | ------------ 36 | 37 | ### 3.1.1 基础调用 38 | 39 | 通过命令 Set image-\ \[argv1 argv2\...\... 40 | 41 | ### 3.1.2 复古调用 42 | 43 | 新建image.bat 44 | 45 | 内容 46 | 47 | 即可通过普通的调用第三方的方式来调用: 48 | 49 | image \[argv1 \[argv2\...\... 50 | 51 | 此方法会影响效率 52 | 53 | 3.2 基础命令 54 | ------------ 55 | 56 | ### 3.2.1 help 57 | 58 | 显示帮助 59 | 60 | ### 3.2.2 load 61 | 62 | **语法:load \ file** 63 | 64 | \@param tag Tag名称 65 | 66 | \@param file 文件路径(也许不支持中文) 67 | 68 | 作用:新建图元[^1]并将file文件绘制到名为\[tag\]的图元并将图元绘制到名为\[tag\]的画布上 69 | 70 | ### 3.2.3 unload 71 | 72 | **语法:unload \** 73 | 74 | \@param tag Tag名称 75 | 76 | 作用:删除画布\[tag\]并释放内存 77 | 78 | ### 3.2.4 save 79 | 80 | **语法: save \ \** 81 | 82 | \@param tag Tag名称 83 | 84 | \@param file 文件路径 85 | 86 | 作用保存画布tag的内容到file 87 | 88 | ### 3.2.5 target 89 | 90 | **语法·:target \** 91 | 92 | \@param tag Tag名称 93 | 94 | 作用:切换当前画图目标到tag 95 | 96 | ### 3.2.6 buffer 97 | 98 | **语法:buffer \ \[width\] \[height\] \[r\] \[g\] \[b\]** 99 | 100 | \@param tag Tag名称 101 | 102 | \@param width 宽 103 | 104 | \@param height 高 105 | 106 | \@param r/g/b RGB颜色的R值G值B值 107 | 108 | 作用: 109 | 新建画布tag,并新建一个颜色为rgb(默认为白色)、大小为w\*h(默认为当前绘图目标的大小)图元tag,再将图元tag绘制到画布tag 110 | 111 | ### 3.2.7 resize 112 | 113 | **语法:** resize \ \ \ 114 | 115 | \@param tag Tag名称 116 | 117 | \@param width 宽 118 | 119 | \@param height 高 120 | 121 | 作用: 122 | 将画布tag缩放到width\*height的大小,如果绘图目标为cmd,则会同时将控制台设置为最适合绘图的状态 123 | 124 | ### 3.2.8 draw 125 | 126 | **语法: draw \ \ \ \[trans \[r\] \[g\] \[b\] \| alpha 127 | \\] ** 128 | 129 | \@param tag Tag名称 130 | 131 | \@param x/y 绘图位置XY 132 | 133 | \@param trans 将颜色为rgb的像素变为透明 134 | 135 | \@param alpha 136 | 137 | \*a 透明度 138 | 139 | 作用: 将画布tag绘制到当前绘图目标的x,y位置上\ 140 | 若指定了trans,则以rgb为透明色(默认为白色)\ 141 | 若指定了alpha,则以a为透明度 142 | 143 | ### 3.2.9 font 144 | 145 | **语法:font \[r\] \[g\] \[b\] \[width\] \[height\] 0 0 \[字体粗细(400)\] 146 | \[斜体(0)\] \[下划线(0)\] \[删除线(0)\] \[字体名\]** 147 | 148 | 作用:设置当前绘图目标所用字体的rgb值和大小 149 | 150 | 注:括号内容为不设置时的占位 151 | 152 | 如果只设置高度,宽度设为0时即按照字体比例自动调整宽度 153 | 154 | ### 3.2.10 text 155 | 156 | **语法:text \ \ \** 157 | 158 | \@param string 内容 159 | 160 | 在当前绘图目标的x,y的位置上输出字符串string 161 | 162 | ### 3.2.11 getpix 163 | 164 | **语法:getpix \ \ \** 165 | 166 | 作用: 将画布tag上x,y位置的rgb值存储到变量image 167 | 168 | ### 3.2.12 setpix 169 | 170 | **语法: setpix tag \ \ \ \ \** 171 | 172 | 作用: 设置画布tag上x,y位置的rgb值 173 | 174 | ### 3.2.13 cls 175 | 176 | 作用:清空画布cmd的内容 177 | 178 | ### 3.2.14 export 179 | 180 | 作用: 将画布cmd的句柄存储到变量image 181 | 182 | ### 3.2.15 import 183 | 184 | **语法:** import \ \ 185 | 186 | \@param handle export出来的cmd句柄 187 | 188 | 作用: 通过句柄将另一个控制台的画布cmd映射到此控制台的画布tag 189 | 190 | ### 3.2.16 sleep 191 | 192 | 语法:sleep \ 193 | 194 | \@param time 毫秒 195 | 196 | 作用: 延时time毫秒 197 | 198 | ### 3.2.17 list 199 | 200 | 语法:list \ \[labal\] 201 | 202 | \@param label 标签名称 203 | 204 | 作用: 205 | 执行image指令脚本file,若指定了label则会直接跳转到脚本中的标签label 206 | 207 | ### 3.2.18 exit 208 | 209 | 作用: 退出当前image指令脚本 210 | 211 | ### 3.2.19 union 212 | 213 | 语法:union \ 214 | 215 | 作用: 合并图层tag中的所有图元成一个与图层tag同名的图元tag 216 | 217 | ### 3.2.20 debug 218 | 219 | 作用: 以图形形式输出图元索引树,用于查看画布cmd上的各个图元 220 | 221 | ### 3.2.22 mouse 222 | 223 | 语法:mouse time \[region1\] \[region2\] .. 224 | 225 | \@param time 等待时间 226 | 227 | 作用:   228 | 229 | 捕获鼠标坐标及事件,坐标以像素为单位,时间以毫秒为单位 230 | 231 | 若time\>-0,当发生点击事件或时间超过限制时会将鼠标坐标x,y以及坐标在画布cmd上所在图元tag的tag存储到变量image,并将图元tag的tag单独再存储到变量errorlevel\ 232 | 若time\<0,不设置时间限制 233 | 234 | 若指定了region,那么返回的的就不是图元tag的tag而是region的序号,如果鼠标坐标不在任何一个指定的region中,则返回序号0\ 235 | region应以如下的形式给出:x1,y1,x2,y2 236 | 237 | ### 3.2.23 show 238 | 239 | 用法:show \ 240 | 241 | 将画布tag显示在一个窗口,当画布更新时窗口内容也会自动更新 242 | 243 | 并将窗口事件数据设置到tag.wm(tag为画布名称) 244 | 245 | Tag.wm的值是一个以空格开头的字符串,以点为参数分割符,当同时有多个事件触发时将会以空格为分割添加第二个事件数据 246 | 247 | 事件列表 248 | 249 | 250 | | 事件名称 | 事件格式 | 例子 | 意思 | 251 | | --- | --- | --- | --- | 252 | | WM\_KEYDOWN | 事件名.按键名.虚拟键码 | WM\_KEYDOWN.VK\_A.65 | 键盘按键按下 | 253 | | WM\_KEYUP | | WM\_KEYUP.VK\_A.65 | 键盘按键松开 | 254 | | WM\_LBUTTONDOWN | 事件名.按键名.按键时的X轴位置.按键时的Y轴位置.图元名称 | WM\_LBUTTONDOWN.MK\_LBUTTON.20.20.doc | 鼠标左键按下 | 255 | | WM\_LBUTTONUP | | WM\_LBUTTONUP.MK\_LBUTTON.20.20.doc | 鼠标左键松开 | 256 | | WM\_RBUTTONDOWN | | WM\_RBUTTONDOWN.MK\_RBUTTON.20.20.doc | 鼠标右键按下 | 257 | | WM\_RBUTTONUP | | WM\_RBUTTONUP.MK\_RBUTTON.20.20.doc | 鼠标右键松开 | 258 | | WM\_MBUTTONDOWN | | WM\_MBUTTONDOWN.MK\_MBUTTON.20.20.doc | 鼠标中键按下 | 259 | | WM\_MBUTTONUP | | WM\_MBUTTONUP.MK\_MBUTTON.20.20.doc | 鼠标中键松开 | 260 | | WM\_MOUSEWHEEL | 事件名.虚拟键名.位移.鼠标相对屏幕的X轴位置.鼠标相对屏幕的Y轴位置 | WM\_MOUSEWHEEL.MK\_SHIFMK\_SHIFT.120.300.231 | 鼠标滚轮滚动 | 261 | | WM\_MOUSEMOVE | 事件名.X.Y.图元名称 | WM\_MOUSEMOVE.2.2.doc | 鼠标移动 | 262 | | WM\_DESTROY | 无 | WM\_DESTROY | 窗口销毁 | 263 | 264 | 265 | ### 3.2.24 hide 266 | 267 | 用法:hide \ 268 | 269 | 隐藏名为tag的窗口 270 | 271 | ### 3.2.25 pen 272 | 273 | 用法:pen \ \ \ \ 274 | 275 | 设置画笔 276 | 277 | ### 3.2.26 brush 278 | 279 | 用法: brush \ \ \ 280 | 281 | 设置刷子颜色 282 | 283 | ### 3.2.27 line 284 | 285 | 用法:line \<起点x\> \<起点y\> \<终点X\> \<终点Y\> 286 | 287 | 画线(画笔用pen命令设置) 288 | 289 | ### 3.2.28 ellipse 290 | 291 | 用法: ellipse \<左上角X\> \<左上角Y\> \<右下角X\> \<右下角Y\> 292 | 293 | 画椭圆 294 | 295 | ### 3.2.29 polygon 296 | 297 | 用法: polygon \ \ \[x3,y3............. 298 | 299 | 画多边形 300 | 301 | ### 3.2.30 picatom 302 | 303 | 用法: picatom \ \ \ 304 | 305 | 获取画布tag 点x y处的图元名称 306 | 307 | ### 3.2.31 cmd 308 | 309 | 用法:cmd \ 310 | 311 | 执行cmd命令(感觉是个鸡肋) 312 | 313 | ### 3.2.32 thread 314 | 315 | 用法: thread \ 316 | 317 | 在一个进程内执行多个脚本(多线程) 318 | 319 | 3.3 特性 320 | -------- 321 | 322 | 在命令前加\[Tag\]可以修改本条命令的绘图目标 323 | 324 | 如 325 | 326 | \[cmd\] draw bin.bmp 0 0 327 | 328 | 3.4 特殊画布 329 | ------------ 330 | 331 | cmd CMD窗口 332 | --------- --------- 333 | desktop 桌面 334 | 335 | 4. 基本教程 336 | -------- 337 | 338 | 1. 基础 339 | ---- 340 | 341 | **Image的命令由修改版cmd.exe和image.dll解释,所以在bat的第一行添加代码,把bat交给修改版cmd.exe解释。代码的内容为:** 342 | 343 | 4.2 显示一张图片 344 | ---------------- 345 | 346 | [**[显示一张图片]{.underline}**](Demo/显示图片/显示图片.bat) 347 | 348 | 4.3 绘制文字 349 | ------------ 350 | 351 | [**[绘制文字]{.underline}**](Demo/绘制文字/绘制文字.bat) 352 | 353 | [^1]: 图元:方便判断碰撞箱的的一种介质 354 | -------------------------------------------------------------------------------- /Release/alpha.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | %1start /b "" "%~dp0cmd.exe" "/c %~fs0 :"&exit 3 | setlocal EnableDelayedExpansion 4 | set image=load bin bin.bmp 5 | set image=target bin 6 | set image=draw bin 100 100 alpha 150 7 | set image=target cmd 8 | set image=draw bin 0 0 9 | pause -------------------------------------------------------------------------------- /Release/bin.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byaidu/image/7ae6b1000a903d6f0d98f4bbe59b904879f0e6d7/Release/bin.bmp -------------------------------------------------------------------------------- /Release/bin.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byaidu/image/7ae6b1000a903d6f0d98f4bbe59b904879f0e6d7/Release/bin.jpg -------------------------------------------------------------------------------- /Release/bin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byaidu/image/7ae6b1000a903d6f0d98f4bbe59b904879f0e6d7/Release/bin.png -------------------------------------------------------------------------------- /Release/bin2.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byaidu/image/7ae6b1000a903d6f0d98f4bbe59b904879f0e6d7/Release/bin2.bmp -------------------------------------------------------------------------------- /Release/button1.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byaidu/image/7ae6b1000a903d6f0d98f4bbe59b904879f0e6d7/Release/button1.bmp -------------------------------------------------------------------------------- /Release/button2.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byaidu/image/7ae6b1000a903d6f0d98f4bbe59b904879f0e6d7/Release/button2.bmp -------------------------------------------------------------------------------- /Release/changetarget.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | %1start /b "" "%~dp0cmd.exe" "/c %~fs0 :"&exit 3 | setlocal EnableDelayedExpansion 4 | pause 5 | set image=buffer box 600 480 0 0 255 6 | set image=load bin bin.bmp 7 | set image=[cmd] draw bin 0 0 8 | set image=[box] draw bin 0 0 9 | set image=show box 10 | set image=target box 11 | set image=draw bin 100 100 12 | rem set image=hide cmd 13 | :loop 14 | set image=sleep 10 15 | set image=getmsg box 16 | for %%a in (!box.wm!) do for /f "tokens=1-8 delims=." %%b in ("%%a") do ( 17 | if "%%b"=="WM_MOUSEMOVE" set image=line 0 0 %%c %%d 18 | if "%%b"=="WM_DESTROY" exit 19 | ) 20 | goto loop -------------------------------------------------------------------------------- /Release/cmd.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byaidu/image/7ae6b1000a903d6f0d98f4bbe59b904879f0e6d7/Release/cmd.exe -------------------------------------------------------------------------------- /Release/fps.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | %1start /b "" "%~dp0cmd.exe" "/c %~fs0 :"&exit 3 | setlocal EnableDelayedExpansion 4 | set image=load bin bin.bmp 5 | :loop 6 | set /a fps+=1 7 | set image=draw bin 0 0 8 | set image=draw bin !fps! 0 9 | if not "!time:~6,2!"=="!start!" set start=!time:~6,2!&title fps=!fps!&set fps=0 10 | goto loop -------------------------------------------------------------------------------- /Release/full.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | %1start /b "" "%~dp0cmd.exe" "/c %~fs0 :"&exit 3 | setlocal EnableDelayedExpansion 4 | set image=full cmd 5 | cmd -------------------------------------------------------------------------------- /Release/image.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byaidu/image/7ae6b1000a903d6f0d98f4bbe59b904879f0e6d7/Release/image.dll -------------------------------------------------------------------------------- /Release/image.exp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byaidu/image/7ae6b1000a903d6f0d98f4bbe59b904879f0e6d7/Release/image.exp -------------------------------------------------------------------------------- /Release/image.iobj: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byaidu/image/7ae6b1000a903d6f0d98f4bbe59b904879f0e6d7/Release/image.iobj -------------------------------------------------------------------------------- /Release/image.ipdb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byaidu/image/7ae6b1000a903d6f0d98f4bbe59b904879f0e6d7/Release/image.ipdb -------------------------------------------------------------------------------- /Release/image.lib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byaidu/image/7ae6b1000a903d6f0d98f4bbe59b904879f0e6d7/Release/image.lib -------------------------------------------------------------------------------- /Release/image.pdb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byaidu/image/7ae6b1000a903d6f0d98f4bbe59b904879f0e6d7/Release/image.pdb -------------------------------------------------------------------------------- /Release/init.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byaidu/image/7ae6b1000a903d6f0d98f4bbe59b904879f0e6d7/Release/init.dll -------------------------------------------------------------------------------- /Release/list.bat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byaidu/image/7ae6b1000a903d6f0d98f4bbe59b904879f0e6d7/Release/list.bat -------------------------------------------------------------------------------- /Release/mouse.bat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byaidu/image/7ae6b1000a903d6f0d98f4bbe59b904879f0e6d7/Release/mouse.bat -------------------------------------------------------------------------------- /Release/mouse2.bat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byaidu/image/7ae6b1000a903d6f0d98f4bbe59b904879f0e6d7/Release/mouse2.bat -------------------------------------------------------------------------------- /Release/mouse_dbg.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | %1start /b "" "%~dp0cmd.exe" "/c %~fs0 :"&exit 3 | setlocal EnableDelayedExpansion 4 | set image=resize cmd 1000 1000 5 | set image=buffer pen 6 | set image=load bin bin.bmp 7 | set image=load bin2 bin2.bmp 8 | set image=target bin 9 | set image=draw bin2 300 0 10 | set image=target cmd 11 | set image=font 0 255 255 50 100 12 | call:makepen 255 0 0 13 | :loop 14 | set image=mouse -1 15 | title errorlevel=!errorlevel! 16 | set mouse=!image! 17 | for /f "tokens=1,2,3" %%a in ("!mouse!") do set /a x=%%a,y=%%b 18 | rem set image=cls 19 | cls 20 | set image=draw bin 0 0 21 | set image=draw pen !x! !y! 22 | set image=text "image=!mouse!" 0 600 23 | set image=debug 24 | goto loop 25 | 26 | :makepen 27 | set image=target pen 28 | set image=resize pen 1 1 29 | set image=setpix 0 0 %1 %2 %3 30 | set image=resize pen 50 50 31 | set image=target cmd 32 | goto:eof -------------------------------------------------------------------------------- /Release/pen.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | %1start /b "" "%~dp0cmd.exe" "/c %~fs0 :"&exit 3 | setlocal EnableDelayedExpansion 4 | set image=resize cmd 1000 1000 5 | set image=pen -1 6 | set image=brush 0 0 255 7 | set image=ellipse 0 0 1000 500 8 | set image=polygon 0,0 500,0 1000,1000 0,500 9 | set image=line 0 1000 1000 0 10 | pause -------------------------------------------------------------------------------- /Release/prtsc.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | %1start /b "" "%~dp0cmd.exe" "/c %~fs0 :"&exit 3 | set image=list %0 script 4 | pause 5 | exit 6 | 7 | :script 8 | sleep 10000 9 | save desktop screen.bmp 10 | target desktop 11 | target backup 12 | draw desktop 0 0 13 | target desktop 14 | buffer black 3000 3000 0 0 0 15 | draw black 0 0 16 | sleep 300 17 | draw backup 0 0 18 | exit -------------------------------------------------------------------------------- /Release/regiontreecut.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | %1start /b "" "%~dp0cmd.exe" "/c %~fs0 :"&exit 3 | setlocal EnableDelayedExpansion 4 | set image=resize cmd 1000 1000 5 | set image=buffer p1 1000 500 255 0 0 6 | set image=buffer p2 500 1000 0 0 255 7 | set image=buffer frame1 8 | set image=buffer frame2 9 | set image=target frame1 10 | set image=draw p1 0 0 11 | set image=draw p1 0 500 12 | set image=target frame2 13 | set image=draw p2 0 0 14 | set image=draw p2 500 0 15 | set image=target cmd 16 | set image=draw frame1 0 0 17 | pause 18 | set image=debug 19 | pause 20 | set image=draw frame2 0 0 21 | pause 22 | set image=debug 23 | pause 24 | set image=union cmd 25 | set image=debug 26 | pause -------------------------------------------------------------------------------- /Release/rotate.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | %1start /b "" "%~dp0cmd.exe" "/c %~fs0 :"&exit 3 | setlocal EnableDelayedExpansion 4 | set image=load bin bin.bmp 5 | :loop 6 | set image=rotate bin 30 7 | set image=draw bin 0 0 8 | set image=sleep 50 9 | goto loop -------------------------------------------------------------------------------- /Release/run.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | %1start /b "" "%~dp0cmd.exe" "/c %~fs0 :"&exit 3 | setlocal EnableDelayedExpansion 4 | set image=load bin bin.bmp 5 | :loop 6 | set image=rotate bin 3 7 | set image=draw bin 0 0 8 | echo !image!&!pause! 9 | goto loop -------------------------------------------------------------------------------- /Release/save.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | %1start /b "" "%~dp0cmd.exe" "/c %~fs0 :"&exit 3 | setlocal EnableDelayedExpansion 4 | set image=save bin.bmp bin.jpg 5 | set image=save bin.bmp bin.png 6 | pause -------------------------------------------------------------------------------- /Release/screen.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byaidu/image/7ae6b1000a903d6f0d98f4bbe59b904879f0e6d7/Release/screen.bmp -------------------------------------------------------------------------------- /Release/test.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byaidu/image/7ae6b1000a903d6f0d98f4bbe59b904879f0e6d7/Release/test.txt -------------------------------------------------------------------------------- /Release/test2.txt: -------------------------------------------------------------------------------- 1 | dr bin 500 0 2 | te "hello world" 0 800 3 | te "image the best" 0 400 4 | te "the test" 0 300 -------------------------------------------------------------------------------- /Release/th1.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | %1start /b "" "%~dp0cmd.exe" "/c %~fs0 :"&exit 3 | setlocal EnableDelayedExpansion 4 | set msg=hello 5 | set image=setvar msg 6 | :loop 7 | set /a color=(color+1)%%256 8 | set image=buffer buf 100 100 0 0 !color! 9 | set image=draw buf 0 0 10 | set image=sleep 10 11 | goto loop -------------------------------------------------------------------------------- /Release/th2.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | %1start /b "" "%~dp0cmd.exe" "/c %~fs0 :"&exit 3 | setlocal EnableDelayedExpansion 4 | :loop 5 | set image=getvar msg 6 | title msg:!msg! 7 | set /a color=(color+1)%%256 8 | set image=buffer buf 100 100 !color! 0 0 9 | set image=draw buf 100 0 10 | set image=sleep 5 11 | goto loop -------------------------------------------------------------------------------- /Release/thread.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | %1start /b "" "%~dp0cmd.exe" "/c %~fs0 :"&exit 3 | setlocal EnableDelayedExpansion 4 | set image=thread th1.bat 5 | set image=thread th2.bat 6 | pause -------------------------------------------------------------------------------- /Release/x.bat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byaidu/image/7ae6b1000a903d6f0d98f4bbe59b904879f0e6d7/Release/x.bat -------------------------------------------------------------------------------- /Release/x.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byaidu/image/7ae6b1000a903d6f0d98f4bbe59b904879f0e6d7/Release/x.txt -------------------------------------------------------------------------------- /image.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio 15 4 | VisualStudioVersion = 15.0.27130.2027 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "image", "image\image.vcxproj", "{24F89998-FE47-4AAC-8884-77F16F2B456D}" 7 | EndProject 8 | Global 9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 10 | Debug|x64 = Debug|x64 11 | Debug|x86 = Debug|x86 12 | Release|x64 = Release|x64 13 | Release|x86 = Release|x86 14 | EndGlobalSection 15 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 16 | {24F89998-FE47-4AAC-8884-77F16F2B456D}.Debug|x64.ActiveCfg = Debug|x64 17 | {24F89998-FE47-4AAC-8884-77F16F2B456D}.Debug|x64.Build.0 = Debug|x64 18 | {24F89998-FE47-4AAC-8884-77F16F2B456D}.Debug|x86.ActiveCfg = Debug|Win32 19 | {24F89998-FE47-4AAC-8884-77F16F2B456D}.Debug|x86.Build.0 = Debug|Win32 20 | {24F89998-FE47-4AAC-8884-77F16F2B456D}.Release|x64.ActiveCfg = Release|x64 21 | {24F89998-FE47-4AAC-8884-77F16F2B456D}.Release|x64.Build.0 = Release|x64 22 | {24F89998-FE47-4AAC-8884-77F16F2B456D}.Release|x86.ActiveCfg = Release|Win32 23 | {24F89998-FE47-4AAC-8884-77F16F2B456D}.Release|x86.Build.0 = Release|Win32 24 | EndGlobalSection 25 | GlobalSection(SolutionProperties) = preSolution 26 | HideSolutionNode = FALSE 27 | EndGlobalSection 28 | GlobalSection(ExtensibilityGlobals) = postSolution 29 | SolutionGuid = {DE1A1DF5-3928-4324-AC80-DA62047E09AB} 30 | EndGlobalSection 31 | EndGlobal 32 | -------------------------------------------------------------------------------- /image/Release/image.Build.CppClean.log: -------------------------------------------------------------------------------- 1 | c:\users\apple\source\repos\image\image\release\vc141.pdb 2 | c:\users\apple\source\repos\image\image\release\image.obj 3 | c:\users\apple\source\repos\image\release\image.lib 4 | c:\users\apple\source\repos\image\release\image.exp 5 | c:\users\apple\source\repos\image\release\image.ipdb 6 | c:\users\apple\source\repos\image\release\image.iobj 7 | c:\users\apple\source\repos\image\release\image.dll 8 | c:\users\apple\source\repos\image\release\image.pdb 9 | c:\users\apple\source\repos\image\image\release\image.tlog\cl.command.1.tlog 10 | c:\users\apple\source\repos\image\image\release\image.tlog\cl.read.1.tlog 11 | c:\users\apple\source\repos\image\image\release\image.tlog\cl.write.1.tlog 12 | c:\users\apple\source\repos\image\image\release\image.tlog\image.write.1u.tlog 13 | c:\users\apple\source\repos\image\image\release\image.tlog\link.command.1.tlog 14 | c:\users\apple\source\repos\image\image\release\image.tlog\link.delete.1.tlog 15 | c:\users\apple\source\repos\image\image\release\image.tlog\link.read.1.tlog 16 | c:\users\apple\source\repos\image\image\release\image.tlog\link.write.1.tlog 17 | -------------------------------------------------------------------------------- /image/Release/image.log: -------------------------------------------------------------------------------- 1 |  image.cpp 2 | c:\users\apple\source\repos\image\image\region.hpp : warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失 3 | c:\users\apple\source\repos\image\image\keydef.hpp : warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失 4 | image.cpp(1096): warning C4018: “<”: 有符号/无符号不匹配 5 | 正在创建库 C:\Users\apple\source\repos\image\Release\image.lib 和对象 C:\Users\apple\source\repos\image\Release\image.exp 6 | 正在生成代码 7 | 518 of 1130 functions (45.8%) were compiled, the rest were copied from previous compilation. 8 | 420 functions were new in current compilation 9 | 56 functions had inline decision re-evaluated but remain unchanged 10 | 已完成代码的生成 11 | image.vcxproj -> C:\Users\apple\source\repos\image\Release\image.dll 12 | -------------------------------------------------------------------------------- /image/Release/image.obj: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byaidu/image/7ae6b1000a903d6f0d98f4bbe59b904879f0e6d7/image/Release/image.obj -------------------------------------------------------------------------------- /image/Release/image.tlog/CL.command.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byaidu/image/7ae6b1000a903d6f0d98f4bbe59b904879f0e6d7/image/Release/image.tlog/CL.command.1.tlog -------------------------------------------------------------------------------- /image/Release/image.tlog/CL.read.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byaidu/image/7ae6b1000a903d6f0d98f4bbe59b904879f0e6d7/image/Release/image.tlog/CL.read.1.tlog -------------------------------------------------------------------------------- /image/Release/image.tlog/CL.write.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byaidu/image/7ae6b1000a903d6f0d98f4bbe59b904879f0e6d7/image/Release/image.tlog/CL.write.1.tlog -------------------------------------------------------------------------------- /image/Release/image.tlog/image.lastbuildstate: -------------------------------------------------------------------------------- 1 | #TargetFrameworkVersion=v4.0:PlatformToolSet=v141:EnableManagedIncrementalBuild=false:VCToolArchitecture=Native32Bit:WindowsTargetPlatformVersion=10.0.16299.0 2 | Release|Win32|C:\Users\apple\source\repos\image\| 3 | -------------------------------------------------------------------------------- /image/Release/image.tlog/image.write.1u.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byaidu/image/7ae6b1000a903d6f0d98f4bbe59b904879f0e6d7/image/Release/image.tlog/image.write.1u.tlog -------------------------------------------------------------------------------- /image/Release/image.tlog/link.command.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byaidu/image/7ae6b1000a903d6f0d98f4bbe59b904879f0e6d7/image/Release/image.tlog/link.command.1.tlog -------------------------------------------------------------------------------- /image/Release/image.tlog/link.read.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byaidu/image/7ae6b1000a903d6f0d98f4bbe59b904879f0e6d7/image/Release/image.tlog/link.read.1.tlog -------------------------------------------------------------------------------- /image/Release/image.tlog/link.write.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byaidu/image/7ae6b1000a903d6f0d98f4bbe59b904879f0e6d7/image/Release/image.tlog/link.write.1.tlog -------------------------------------------------------------------------------- /image/Release/vc141.pdb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byaidu/image/7ae6b1000a903d6f0d98f4bbe59b904879f0e6d7/image/Release/vc141.pdb -------------------------------------------------------------------------------- /image/image.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byaidu/image/7ae6b1000a903d6f0d98f4bbe59b904879f0e6d7/image/image.cpp -------------------------------------------------------------------------------- /image/image.vcxproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Debug 6 | Win32 7 | 8 | 9 | Release 10 | Win32 11 | 12 | 13 | Debug 14 | x64 15 | 16 | 17 | Release 18 | x64 19 | 20 | 21 | 22 | 15.0 23 | {24F89998-FE47-4AAC-8884-77F16F2B456D} 24 | image 25 | 10.0.16299.0 26 | 27 | 28 | 29 | Application 30 | true 31 | v141 32 | MultiByte 33 | 34 | 35 | DynamicLibrary 36 | false 37 | v141 38 | true 39 | MultiByte 40 | 41 | 42 | Application 43 | true 44 | v141 45 | MultiByte 46 | 47 | 48 | Application 49 | false 50 | v141 51 | true 52 | MultiByte 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | Level3 76 | Disabled 77 | true 78 | true 79 | MultiThreaded 80 | 81 | 82 | 83 | 84 | Level3 85 | Disabled 86 | true 87 | true 88 | 89 | 90 | 91 | 92 | Level3 93 | MaxSpeed 94 | true 95 | true 96 | true 97 | true 98 | MultiThreaded 99 | 100 | 101 | true 102 | true 103 | 104 | 105 | 106 | 107 | Level3 108 | MaxSpeed 109 | true 110 | true 111 | true 112 | true 113 | 114 | 115 | true 116 | true 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | -------------------------------------------------------------------------------- /image/image.vcxproj.filters: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | {4FC737F1-C7A5-4376-A066-2A32D752A2FF} 6 | cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx 7 | 8 | 9 | {93995380-89BD-4b04-88EB-625FBE52EBFB} 10 | h;hh;hpp;hxx;hm;inl;inc;xsd 11 | 12 | 13 | {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} 14 | rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms 15 | 16 | 17 | 18 | 19 | 源文件 20 | 21 | 22 | -------------------------------------------------------------------------------- /image/image.vcxproj.user: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | -------------------------------------------------------------------------------- /image/keydef.hpp: -------------------------------------------------------------------------------- 1 | #ifndef _KEYDEF_HPP_ 2 | #define _KEYDEF_HPP_ 3 | 4 | #include 5 | #include 6 | #include 7 | using namespace std; 8 | 9 | //GNU C Complier support 10 | #define WIDE(str) L##str 11 | 12 | #define KEYDEF(key) (keymap[key] = WIDE(#key)) 13 | #define WMDEF(key) (wmmap[key] = WIDE(#key)) 14 | #define MKDEF(key) (mkmap[key] = WIDE(#key)) 15 | 16 | //不应该用wstring产生过多对象,用const wchar_t * 17 | map keymap; //vk映射表 18 | 19 | //不用这些了 20 | //map mkmap; //mk映射表 21 | 22 | //map wmmap; //wm映射表 23 | void initkeydef() 24 | { 25 | KEYDEF(VK_LBUTTON); 26 | KEYDEF(VK_RBUTTON); 27 | KEYDEF(VK_CANCEL); 28 | KEYDEF(VK_MBUTTON); 29 | KEYDEF(VK_XBUTTON1); 30 | KEYDEF(VK_XBUTTON2); 31 | KEYDEF(VK_BACK); 32 | KEYDEF(VK_TAB); 33 | KEYDEF(VK_CLEAR); 34 | KEYDEF(VK_RETURN); 35 | KEYDEF(VK_SHIFT); 36 | KEYDEF(VK_CONTROL); 37 | KEYDEF(VK_MENU); 38 | KEYDEF(VK_PAUSE); 39 | KEYDEF(VK_CAPITAL); 40 | KEYDEF(VK_KANA); 41 | KEYDEF(VK_HANGEUL); 42 | KEYDEF(VK_HANGUL); 43 | KEYDEF(VK_JUNJA); 44 | KEYDEF(VK_FINAL); 45 | KEYDEF(VK_HANJA); 46 | KEYDEF(VK_KANJI); 47 | KEYDEF(VK_ESCAPE); 48 | KEYDEF(VK_CONVERT); 49 | KEYDEF(VK_NONCONVERT); 50 | KEYDEF(VK_ACCEPT); 51 | KEYDEF(VK_MODECHANGE); 52 | KEYDEF(VK_SPACE); 53 | KEYDEF(VK_PRIOR); 54 | KEYDEF(VK_NEXT); 55 | KEYDEF(VK_END); 56 | KEYDEF(VK_HOME); 57 | KEYDEF(VK_LEFT); 58 | KEYDEF(VK_UP); 59 | KEYDEF(VK_RIGHT); 60 | KEYDEF(VK_DOWN); 61 | KEYDEF(VK_SELECT); 62 | KEYDEF(VK_PRINT); 63 | KEYDEF(VK_EXECUTE); 64 | KEYDEF(VK_SNAPSHOT); 65 | KEYDEF(VK_INSERT); 66 | KEYDEF(VK_DELETE); 67 | KEYDEF(VK_HELP); 68 | KEYDEF(VK_LWIN); 69 | KEYDEF(VK_RWIN); 70 | KEYDEF(VK_APPS); 71 | KEYDEF(VK_SLEEP); 72 | KEYDEF(VK_NUMPAD0); 73 | KEYDEF(VK_NUMPAD1); 74 | KEYDEF(VK_NUMPAD2); 75 | KEYDEF(VK_NUMPAD3); 76 | KEYDEF(VK_NUMPAD4); 77 | KEYDEF(VK_NUMPAD5); 78 | KEYDEF(VK_NUMPAD6); 79 | KEYDEF(VK_NUMPAD7); 80 | KEYDEF(VK_NUMPAD8); 81 | KEYDEF(VK_NUMPAD9); 82 | KEYDEF(VK_MULTIPLY); 83 | KEYDEF(VK_ADD); 84 | KEYDEF(VK_SEPARATOR); 85 | KEYDEF(VK_SUBTRACT); 86 | KEYDEF(VK_DECIMAL); 87 | KEYDEF(VK_DIVIDE); 88 | KEYDEF(VK_F1); 89 | KEYDEF(VK_F2); 90 | KEYDEF(VK_F3); 91 | KEYDEF(VK_F4); 92 | KEYDEF(VK_F5); 93 | KEYDEF(VK_F6); 94 | KEYDEF(VK_F7); 95 | KEYDEF(VK_F8); 96 | KEYDEF(VK_F9); 97 | KEYDEF(VK_F10); 98 | KEYDEF(VK_F11); 99 | KEYDEF(VK_F12); 100 | KEYDEF(VK_F13); 101 | KEYDEF(VK_F14); 102 | KEYDEF(VK_F15); 103 | KEYDEF(VK_F16); 104 | KEYDEF(VK_F17); 105 | KEYDEF(VK_F18); 106 | KEYDEF(VK_F19); 107 | KEYDEF(VK_F20); 108 | KEYDEF(VK_F21); 109 | KEYDEF(VK_F22); 110 | KEYDEF(VK_F23); 111 | KEYDEF(VK_F24); 112 | 113 | //无语... 114 | 115 | /* 116 | keymap['1'] = L"VK_1"; 117 | keymap['2'] = L"VK_2"; 118 | keymap['3'] = L"VK_3"; 119 | keymap['4'] = L"VK_4"; 120 | keymap['5'] = L"VK_5"; 121 | keymap['6'] = L"VK_6"; 122 | keymap['7'] = L"VK_7"; 123 | keymap['8'] = L"VK_8"; 124 | keymap['9'] = L"VK_9"; 125 | keymap['0'] = L"VK_0"; 126 | keymap['Q'] = L"VK_Q"; 127 | keymap['W'] = L"VK_W"; 128 | keymap['E'] = L"VK_E"; 129 | keymap['R'] = L"VK_R"; 130 | keymap['T'] = L"VK_T"; 131 | keymap['Y'] = L"VK_Y"; 132 | keymap['U'] = L"VK_U"; 133 | keymap['I'] = L"VK_I"; 134 | keymap['O'] = L"VK_O"; 135 | keymap['P'] = L"VK_P"; 136 | keymap['A'] = L"VK_A"; 137 | keymap['S'] = L"VK_S"; 138 | keymap['D'] = L"VK_D"; 139 | keymap['F'] = L"VK_F"; 140 | keymap['G'] = L"VK_G"; 141 | keymap['H'] = L"VK_H"; 142 | keymap['J'] = L"VK_J"; 143 | keymap['K'] = L"VK_K"; 144 | keymap['L'] = L"VK_L"; 145 | keymap['Z'] = L"VK_Z"; 146 | keymap['X'] = L"VK_X"; 147 | keymap['C'] = L"VK_C"; 148 | keymap['V'] = L"VK_V"; 149 | keymap['B'] = L"VK_B"; 150 | keymap['N'] = L"VK_N"; 151 | keymap['M'] = L"VK_M"; 152 | */ 153 | 154 | /* 155 | MKDEF(MK_CONTROL); 156 | MKDEF(MK_LBUTTON); 157 | MKDEF(MK_MBUTTON); 158 | MKDEF(MK_RBUTTON); 159 | MKDEF(MK_SHIFT); 160 | */ 161 | } 162 | #endif //_KEYDEF_HPP_ 163 | -------------------------------------------------------------------------------- /image/region.hpp: -------------------------------------------------------------------------------- 1 | #ifndef _REGION_HPP_ 2 | #define _REGION_HPP_ 3 | 4 | #include 5 | #include 6 | #include 7 | #define toRange(x, min, max) ((x) < (min) ? (min) : (x) > (max) ? (max) : (x)) 8 | #define inRange(x, min, max) ((min) <= (x) && (x) < (max)) 9 | using namespace std; 10 | 11 | void colorregion(HDC hDC, int color, int x1, int y1, int x2, int y2); 12 | void colorborder(HDC hDC, int color, int x1, int y1, int x2, int y2); 13 | int HSL2RGB(double H, double S, double L); 14 | 15 | class region 16 | { 17 | public: 18 | int x1, y1, x2, y2; 19 | wstring name; 20 | inline region(int ix1, int iy1, int ix2, int iy2, const wstring &iname) : 21 | x1(ix1), 22 | y1(iy1), 23 | x2(ix2), 24 | y2(iy2), 25 | name(iname) 26 | { 27 | } 28 | }; 29 | class regSet 30 | { 31 | list regs; 32 | inline void region_add(int x1, int y1, int x2, int y2, const wstring &name) 33 | { 34 | if (!(x1 == x2 || y1 == y2)) regs.push_back(region(x1, y1, x2, y2, name)); 35 | } 36 | 37 | public: 38 | void add(const region &r) 39 | { 40 | for (list::iterator ri = regs.begin(); ri != regs.end();) 41 | { 42 | int x1 = toRange(r.x1, ri->x1, ri->x2); 43 | int y1 = toRange(r.y1, ri->y1, ri->y2); 44 | int x2 = toRange(r.x2, ri->x1, ri->x2); 45 | int y2 = toRange(r.y2, ri->y1, ri->y2); 46 | 47 | if (!(x1 == x2 || y1 == y2)) 48 | { 49 | region_add(x1, ri->y1, ri->x2, y1, ri->name); 50 | region_add(x2, y1, ri->x2, ri->y2, ri->name); 51 | region_add(ri->x1, y2, x2, ri->y2, ri->name); 52 | region_add(ri->x1, ri->y1, x1, y2, ri->name); 53 | 54 | regs.erase(ri++); 55 | } 56 | else 57 | ++ri; 58 | } 59 | 60 | regs.push_back(r); 61 | } 62 | 63 | void add(const regSet &rS, int x0, int y0) 64 | { 65 | for (list::const_iterator ri = rS.regs.begin(); ri != rS.regs.end(); ++ri) 66 | add(region(ri->x1 + x0, ri->y1 + y0, ri->x2 + x0, ri->y2 + y0, ri->name)); 67 | } 68 | 69 | void clear() 70 | { 71 | for (list::iterator ri = regs.begin(); ri != regs.end();) regs.erase(ri++); 72 | } 73 | 74 | const wstring query(int mx, int my) const 75 | { 76 | for (list::const_iterator ri = regs.begin(); ri != regs.end(); ++ri) 77 | if (inRange(mx, ri->x1, ri->x2) && inRange(my, ri->y1, ri->y2)) return ri->name; 78 | 79 | return L""; 80 | } 81 | 82 | void debug() const 83 | { 84 | HDC hdc = GetDC(GetConsoleWindow()); 85 | for (list::const_iterator ri = regs.begin(); ri != regs.end(); ++ri) 86 | { 87 | //wprintf(L"%d %d %d %d %s\n", ri->x1, ri->y1, ri->x2, ri->y2, ri->name.c_str()); 88 | colorborder 89 | ( 90 | hdc, 91 | HSL2RGB(rand() / (float)32768, 1, 0.5), 92 | ri->x1, 93 | ri->y1, 94 | ri->x2 - 1, 95 | ri->y2 - 1 96 | ); 97 | } 98 | } 99 | }; 100 | 101 | void colorregion(HDC hDC, int color, int x1, int y1, int x2, int y2) 102 | { 103 | HPEN gPen = CreatePen(PS_SOLID, 1, color); 104 | HBRUSH gBrush = CreateSolidBrush(color); 105 | HPEN oPen = (HPEN) SelectObject(hDC, gPen); 106 | HBRUSH oBrush = (HBRUSH) SelectObject(hDC, gBrush); 107 | 108 | Rectangle(hDC, x1, y1, x2 + 1, y2 + 1); 109 | 110 | SelectObject(hDC, oPen); 111 | SelectObject(hDC, oBrush); 112 | DeleteObject(gPen); 113 | DeleteObject(gBrush); 114 | }; 115 | 116 | void colorborder(HDC hDC, int color, int x1, int y1, int x2, int y2) 117 | { 118 | HPEN gPen = CreatePen(PS_SOLID, 1, color); 119 | HBRUSH gBrush = (HBRUSH) GetStockObject(NULL_BRUSH); 120 | HPEN oPen = (HPEN) SelectObject(hDC, gPen); 121 | HBRUSH oBrush = (HBRUSH) SelectObject(hDC, gBrush); 122 | 123 | Rectangle(hDC, x1, y1, x2 + 1, y2 + 1); 124 | 125 | SelectObject(hDC, oPen); 126 | SelectObject(hDC, oBrush); 127 | DeleteObject(gPen); 128 | DeleteObject(gBrush); 129 | }; 130 | int HSL2RGB(double H, double S, double L) 131 | { 132 | double R, G, B; 133 | if (S == 0) 134 | { 135 | R = G = B = L; 136 | } 137 | else 138 | { 139 | double T[3]; 140 | double q, p; 141 | if (L < 0.5) 142 | q = L * (1.0 + S); 143 | else 144 | q = L + S - L * S; 145 | p = 2.0 * L - q; 146 | T[0] = H + 0.3333333f; 147 | T[1] = H; 148 | T[2] = H - 0.3333333f; 149 | for (int i = 0; i < 3; i++) 150 | { 151 | if (T[i] < 0) T[i] += 1.0f; 152 | if (T[i] > 1) T[i] -= 1.0f; 153 | if ((T[i] * 6) < 1) 154 | { 155 | T[i] = p + ((q - p) * 6.0f * T[i]); 156 | } 157 | else if ((T[i] * 2.0f) < 1) 158 | { 159 | T[i] = q; 160 | } 161 | else if ((T[i] * 3.0f) < 2) 162 | { 163 | T[i] = p + (q - p) * ((2.0f / 3.0f) - T[i]) * 6.0f; 164 | } 165 | else 166 | T[i] = p; 167 | } 168 | 169 | R = T[0]; 170 | G = T[1]; 171 | B = T[2]; 172 | } 173 | 174 | R = ((R > 1) ? 1 : ((R < 0) ? 0 : R)); //取值范围(0,1) 175 | G = ((G > 1) ? 1 : ((G < 0) ? 0 : G)); //取值范围(0,1) 176 | B = ((B > 1) ? 1 : ((B < 0) ? 0 : B)); //取值范围(0,1) 177 | return RGB((int)(R * 255), (int)(G * 255), (int)(B * 255)); 178 | } 179 | #endif // _REGION_HPP_ 180 | -------------------------------------------------------------------------------- /image/regionmgr.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byaidu/image/7ae6b1000a903d6f0d98f4bbe59b904879f0e6d7/image/regionmgr.cpp --------------------------------------------------------------------------------