设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 4666|回复: 7
打印 上一主题 下一主题

[原创发布] bitmap=>png 简版

[复制链接]

Lv4.逐梦者

梦石
0
星屑
13559
在线时间
2753 小时
注册时间
2014-10-4
帖子
756

R考场第七期纪念奖

跳转到指定楼层
1
发表于 2015-8-9 22:35:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
本帖最后由 SixRC 于 2017-10-16 20:18 编辑

借鉴了 @dant  的范本 获益匪浅 打算自己再写一个 于是就有了这个
相比他的版本 我精简了原有的东西 把取地址和取数据两块重写了 效率高了
不过保存一下小图是根本看不出来的....因为他的已经很快了

2015/9/26 更新一处地方 效率大大提高 汗
2015/9/27 发现不知为何用<<的话效率骤降 是和xp不兼容还是什么 别的版本没试过 所以依旧是xp发布
2015/9/30 发现要改还是有蛮多地方可以改的..这次节省了重复内容
2017/10/10 更新了保存大规格bitmap的脚本
2017/10/16 优化了汇编代码

RUBY 代码复制
  1. class Bitmap
  2.   #-------------------------------------------------------------------#
  3.   #借鉴dant所成
  4.   #当然 我也努力了 —_—||
  5.   #不 是很努力呢                         -By SixRC
  6.   #-------------------------------------------------------------------#
  7.   #用法为  bitmap.ToPng(filename)
  8.   #假如很追求速度的话 下面的第34行改成
  9.   #data2 = Zlib::Deflate.deflate(@bit_data,1)
  10.   #这样压缩速度会提高(约快一倍) 虽然文件会变大 那个数值可以是1-9 0是不压缩 但不骗你 很慢 因为 写入慢了
  11.   #-------------------------------------------------------------------#
  12.   #--------------------------获取数据头地址---------------
  13.   CWP = Win32API.new('user32.dll','CallWindowProc','ppiii','i')
  14.   GetAddr=[139,116,36,8,139,54,139,118,8,139,118,16,139,124,36,4,137,55,194,16,0].pack("C*")
  15.   def addr
  16.     s="\0"*4
  17.     CWP.call(GetAddr,s,object_id*2+16,0,0)
  18.     s.unpack("L")[0]
  19.   end
  20.   #--------------------------保存为png--------------------
  21.   D1="\x89\x50\x4e\x47\x0d\x0a\x1a\x0a\x0\x0\x0\xdIHDR"
  22.   D2="\x8\x6\x0\x0\x0"
  23.   D3="\x00\x00\x00\x00\x49\x45\x4E\x44\xAE\x42\x60\x82"
  24.   GetData=[85,137,229,139,125,8,49,210,139,101,20,137,227,68,139,69,16,137,198,193,230,3,193,224,2,15,175,224,139,69,12,1,196,139,77,16,66,41,244,88,15,200,193,200,8,137,4,23,141,82,4,73,117,241,75,117,232,137,236,93,194,16,0].pack("C*")
  25.   def ToPng(pl)
  26.     unless @kg
  27.       @addr=addr
  28.       @kg=[width].pack("N")+[height].pack("N")
  29.       c1="IHDR"+@kg+D2
  30.       @crc1=[Zlib.crc32(c1)].pack("N")
  31.       @bit_data="\0"*height*(width*4+1)
  32.     end
  33.     CWP.call(GetData,@bit_data,@addr,width,height)
  34.     data2 = Zlib::Deflate.deflate(@bit_data)
  35.     crc2=[Zlib.crc32("IDAT"+data2)].pack("N")
  36.     sod=[data2.length].pack("N")
  37.     File.open(pl,"w+b"){|i|i.write(D1+@kg+D2+@crc1+sod+"IDAT"+data2+crc2+D3)}
  38.   end
  39. end

假如对象是很大的bitmap
请使用:
code







点评

@晴兰 不过我不会!我做的任何都绝对不是专业的!我还要慢慢进化!  发表于 2015-9-30 18:45
不用<<你可以用join。另外这种方式是我早期纯黑的产物。现在我们都有组织有纪律的黑了,可以用DSL来写这些机器码。  发表于 2015-9-30 02:40

Lv4.逐梦者

梦石
0
星屑
9275
在线时间
2504 小时
注册时间
2011-5-20
帖子
15389

开拓者

2
发表于 2015-8-9 22:45:17 | 只看该作者
那么这是一个截图脚本?
[img]http://service.t.sina.com.cn/widget/qmd/5339802982/c02e16bd/7.png
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
13559
在线时间
2753 小时
注册时间
2014-10-4
帖子
756

R考场第七期纪念奖

3
 楼主| 发表于 2015-8-9 22:47:10 | 只看该作者
chd114 发表于 2015-8-9 22:45
那么这是一个截图脚本?

ya 标题不是很直白吗...
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
9275
在线时间
2504 小时
注册时间
2011-5-20
帖子
15389

开拓者

4
发表于 2015-8-9 22:50:59 | 只看该作者
SixRC 发表于 2015-8-9 05:47
ya 标题不是很直白吗...

我差点以为是别的什么用途的脚本···

点评

其实 gif和png连放真的是一样的 两个都是一帧一幅画 从播放的角度讲 完全没有区别 更连贯一定是错觉  发表于 2015-8-10 00:26
没有啊 先全加载好 完全没差的 不过我不懂具体原理..说错了不要找我  发表于 2015-8-9 23:27
GIF连贯一些···  发表于 2015-8-9 23:24
做动画 我都是先保存为png然后piapiapia的一张张放 效果很好啊 先找软件把png压缩一下就不会大 为什么要gif呢 ...以及我不懂gif的格式..而且去搞懂真是...  发表于 2015-8-9 23:22
来个做GIF的吧···这样的话做预告也能省点事···  发表于 2015-8-9 23:19
[img]http://service.t.sina.com.cn/widget/qmd/5339802982/c02e16bd/7.png
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (版主)

…あたしは天使なんかじゃないわ

梦石
0
星屑
2207
在线时间
4033 小时
注册时间
2010-10-4
帖子
10779

开拓者贵宾

5
发表于 2015-8-10 10:01:29 | 只看该作者
本帖最后由 taroxd 于 2015-8-10 10:13 编辑

全程机器码的感觉如何……

然后,在VA里,不同编码的字符串是不能+的

改成这样就是通用发布了:
  1. File.open(pl,"wb"){|i|i<<D1<<kg<<D2<<crc1<<sod<<'IDAT'<<data<<crc2<<D3}
复制代码

点评

已改  发表于 2015-8-10 13:12
其实是调试完代码就快奔溃了 明明感觉没错 居然总是 内存不能为read..简直死 然后发现写错了 真是..测试完就好开心 别的都不想管了  发表于 2015-8-10 13:01
我也想要16进制!不过翻译的软件 译成16进制 中间没逗号..我又懒得自己写脚本处理 就这样了... 突然想到可以复制到空白文档里把空格替换一下..  发表于 2015-8-10 12:59
其实s20的callproc还算semantic的,也不是\xAA\xBB\xCC\xDD啊……  发表于 2015-8-10 10:31
话说为啥不直接 "\xAA\xBB\xCC\xDD" 呢  发表于 2015-8-10 10:22
回复 支持 反对

使用道具 举报

Lv1.梦旅人

路人党员

梦石
0
星屑
51
在线时间
2276 小时
注册时间
2010-12-30
帖子
3225
6
发表于 2015-8-10 11:21:08 | 只看该作者
机械码让人感觉不安全啊==

点评

well,相信没事就好了 这个真是没问题的...我也不黑心...纯粹学以致用  发表于 2015-8-10 13:04
本人擅长XP,如果有脚本或者Ruby方面的问题欢迎发电邮到[email protected]咨询,本人很少检查电邮所以不一定会及时回复,本人不会直接出手解决问题只会提供一个方向,所以谢绝伸手党
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
13559
在线时间
2753 小时
注册时间
2014-10-4
帖子
756

R考场第七期纪念奖

7
 楼主| 发表于 2015-9-27 11:19:13 | 只看该作者
单纯是更新示意
这样子算是最终版了
恩 就是这样
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (管理员)

老黄鸡

梦石
0
星屑
39679
在线时间
7485 小时
注册时间
2009-7-6
帖子
13483

开拓者贵宾

8
发表于 2015-9-28 02:35:32 | 只看该作者
我觉得紫苏原来那个纯ruby版的已经很快了。

点评

关于那个版本 很难过地说 我找不到.....  发表于 2015-9-30 19:02
RGDirect - DirectX驱动的RGSS,点我了解.
RM全系列成套系统定制请联系QQ1213237796
不接受对其他插件维护的委托
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-4-28 18:59

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表