Project1

标题: BitmapEnhance 2.0 [打印本页]

作者: SixRC    时间: 2019-5-13 13:12
标题: BitmapEnhance 2.0
本帖最后由 SixRC 于 2019-5-20 12:22 编辑

BitmapEnhance2.0 发布
缺乏编辑能力 更新了就直接写最前面了
这次更新 对函数没做改动
变的是效率
现在用了VS编译(VS真香) 然后整理了一下OpenCV模块 添加了多线程等支持(主要是TBB) 删掉了些没用的 用tbb改写了Mosaic
本来想用GPU 但是CUDA适用性不广 OPENCL 用了还不如不用 因为运算量其实不大 时间反而浪费在内存拷贝上 用GPU没体现意义 多线程的意义远远大于GPU了
现在的效率是之前的几倍吧 效率的提升看CPU核心数 至少翻一番
依旧是静态库 所以不用担心运行库的问题
因为文件有6M了 所以是外链
biten2.0

基于 OpenCV 4.1.0
给 Bitmap 类加了一些图像处理功能
顺便结合了上次做的东西  怎样才能更改地图部分色调,部分不更改?
然后就可以很方便的更改显示的画面 像是任意尺寸放大 加滤镜什么的
实现和闲话

下面是新增的方法
作用对象是整个位图
对目前位图的处理需要一个输出位图 可以自己指定 默认输出到自身 传入非位图自动调整为self (这样写参数可以偷懒)
对了 假如图像处理的参数传的值不对 程序会炸 比方需要奇数传了偶数 根据官方文档好好传参
biten_resize
biten_blur
biten_dilate
biten_erode

不想写解释了 因为我也不是那么懂参数的意义 去看 opencv 文档吧 右上角查询
OpenCV 4.1.0 文档
要不百度下 关键词 opencv 函数名 比方 opencv GaussianBlur 肯定一大堆解释加范例 比我说的好多了
biten_GaussianBlur
biten_medianBlur
biten_morphologyEx
biten_Scharr
biten_Canny
Mosaic
filter2D

下面是整个画面滤镜的实现

没了
要用得有脚本基础
有些效果直接作用在画面上会导致字没法看清
所以得对那些位图个别使用
使用需要自己整合
文件 分两个包 因为超出2M大小了
biten1.0.zip (696.79 KB, 下载次数: 155)
bitmap_enhance.zip (1.87 MB, 下载次数: 155)
把下面那个解压到上面那个目录里就行
假如要用画面滤镜的话 请用我提供的 RGSS103J.dll
最大支持 2560*1920 (应该够了吧)
渐变问题也修复了
可以从任意尺寸放大到任意尺寸 但是不能缩小 因为RGSS渲染最多渲染到窗口大小 假如窗口小于需要渲染的初始范围 那些就无法显示了
逻辑是这样
游戏原本分辨率 640*480
现在窗口大小 比方 1280*960
本来只有左上角一块有画面
用了滤镜 加上放大效果
现在整个窗口都有了
这是放大的含义
窗口分辨率什么的要自己去选择
作者: mariofans    时间: 2019-5-16 12:44
不知为何,用自编译的Game.exe会停止运行
作者: SixRC    时间: 2019-5-16 16:12
mariofans 发表于 2019-5-16 12:44
不知为何,用自编译的Game.exe会停止运行

你用动态调试器打开运行下看看挂在哪了?
因为出异常的话会优先给调试端看 不会马上挂的
然后就能清楚为什么会挂了
可能是空指针 写入超出范围啥的
肯定有原因的
分析下基本能看出来
我感觉应该不是我这边的问题
我改了dll 只换exe理论上没问题
我不知道你改了啥 不好猜测
要不你发一份exe给我我晚上分析一下?
我现在有事在外面
作者: mariofans    时间: 2019-5-16 23:51
本帖最后由 mariofans 于 2019-5-17 14:08 编辑
SixRC 发表于 2019-5-16 16:12
你用动态调试器打开运行下看看挂在哪了?
因为出异常的话会优先给调试端看 不会马上挂的
然后就能清楚为什 ...


是基于这个改编的(测试这个也会挂)
汇编层面的东西我就不了解了。。。

ScrSh.png (43.97 KB, 下载次数: 23)

ScrSh.png

ScrSh2.png (35.22 KB, 下载次数: 16)

第二次的报错位置

第二次的报错位置

Custom RGSS Player.rar

67.58 KB, 下载次数: 103


作者: SixRC    时间: 2019-5-17 00:59
本帖最后由 SixRC 于 2019-5-17 11:29 编辑
mariofans 发表于 2019-5-16 23:51
是基于这个改编的(测试这个也会挂)
汇编层面的东西我就不了解了。。。 ...


最新情况
用下面这个 RGSS103J.dll 就行了
改了rm创建堆栈时的参数 现在默认有内存执行权限了 兼容性好
RGSS103J.zip (497.09 KB, 下载次数: 108)
//
已经搞定了 在点评 下面是昨天的
//
收到 现在睡觉了 明天早课 我下课看
我看了下
你在原生exe基础上改的话应该不会出错吧?
假如那样 我现有的猜测是
ruby申请的内存是读写的也就是不可执行的
原game.exe可能注册了异常处理函数
在执行没有执行权限的内存时会改内存权限
可以试试把CCBBSS_CODE的内存权限改下
( virtualprotect 啥的)
或者用你编译的exe 在脚本里试试
code=[0xC2, 0x10, 0] # ret 10h
然后 CallWindowProc 看看会不会挂?
(字符串地址=[code].pack("p").unpack("l")[0]
或者api里用p直接传)

我觉得没啥地方能出错了
假如觉得麻烦的话就等我下

我想了想又觉得不是这个问题
因为平时也没遇到过这种事情
完全是我脑补出来的
算了 明天看到再说

或者和程序的默认堆栈属性有关
感觉我要起不来了
作者: mariofans    时间: 2019-5-20 14:48
本帖最后由 mariofans 于 2019-5-20 14:58 编辑

现在的问题还在缩放上,我只用了纯缩放,只要在关卡中用上缩放总会把58~59帧降到28以下
在标题或者家中移动时基本不掉帧,一旦进入关卡中事件比较多的时候掉帧就很严重
这时候去掉处理直接让SRC原路返回的话又能回到58帧以上
(我用了类变量实现随时变更的缩放)
  1. def ccbbss_process(src)
  2.     if @@dest_bitmap
  3.       CCBBSS_SRC_BITMAP.biten_resize(@@dest_bitmap, 2)
  4.       return @@dest_bitmap
  5.     end
  6.     return CCBBSS_SRC_BITMAP
  7.   end
复制代码

起初怀疑仍是处理的时间长,就调查了一下处理时间,从640x480到1280x960也就花了0.002
然后怀疑是Set_Bitmap的问题,但无论@@dest_bitmap存在与否Set_Bitmap都会执行,难道是大图转换的时间长?
然后我又记录了Set_Bitmap的时间,发现也是0.00x
然后我又不知道问题在哪里了

20190520142602.png (703.53 KB, 下载次数: 20)

标题

标题

20190520142615.png (141.34 KB, 下载次数: 25)

关卡

关卡

QQ图片20190520145757.png (764.5 KB, 下载次数: 14)

QQ图片20190520145757.png

QQ图片20190520145802.png (138.39 KB, 下载次数: 20)

QQ图片20190520145802.png





欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1