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

Project1

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

XP版 Graphics.snap_to_bitmap

 关闭 [复制链接]

Lv1.梦旅人

彩色的银子

梦石
0
星屑
50
在线时间
190 小时
注册时间
2006-6-13
帖子
1361

贵宾

跳转到指定楼层
1
发表于 2008-11-28 11:26:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
!!!呃``啊``好象发错区了```帮忙转一下``= =```


  1. #==============================================================================
  2. # ■ Graphics
  3. #------------------------------------------------------------------------------
  4. #  进行有关全体图像处理的模块。
  5. #   RMXP 版的 Graphics.snap_to_bitmap
  6. #==============================================================================

  7. class << Graphics
  8.   GetWindowDC = Win32API.new("user32", "GetWindowDC", "l", "l")
  9.   GetDC = Win32API.new("user32", "GetDC", "l", "l")
  10.   GetPrivateProfileString = Win32API.new("kernel32", "GetPrivateProfileStringA", "pppplp", "l")
  11.   FindWindow = Win32API.new("user32", "FindWindowA", "pp", "l" )
  12.   CreateDC = Win32API.new("gdi32", "CreateDC", "pppl", "l")
  13.   CreateCompatibleBitmap = Win32API.new("gdi32", "CreateCompatibleBitmap", "lll", "l")
  14.   CreateCompatibleDC = Win32API.new("gdi32", "CreateCompatibleDC", "l", "l")
  15.   SelectObject = Win32API.new("gdi32", "SelectObject", "ll", "l")
  16.   BitBlt = Win32API.new("gdi32", "BitBlt", "lllllllll", "l")
  17.   GetBitmapBits = Win32API.new("gdi32", "GetBitmapBits", "llp", "l")
  18.   ScreenToClient = Win32API.new("user32", "ScreenToClient", "ip", "i")
  19.   SRCCOPY = 0xCC0020
  20.   #--------------------------------------------------------------------------
  21.   # ● snap_to_bitmap
  22.   #   将当前画面转换为Bitmap对象
  23.   #--------------------------------------------------------------------------
  24.   def snap_to_bitmap
  25.     hb = Bitmap.new(640,480)
  26.     rgbs = self.bitmap_data
  27.     x=y=0
  28.     indexs = [0]
  29.     t1 = Time.now
  30.     for i in indexs
  31.       break if rgbs[i].nil?
  32.       break if rgbs[i+1].nil?
  33.       break if rgbs[i+2].nil?
  34.       break if rgbs[i+3].nil?
  35.       color = Color.new(rgbs[i+2],rgbs[i+1],rgbs[i],rgbs[i+3])
  36.       hb.set_pixel(x,y,color)
  37.       x += 1
  38.       if x == 640
  39.         x = 0
  40.         y += 1
  41.       end
  42.       indexs << i + 4
  43.     end
  44.     t2 = Time.now
  45.     #p t2 - t1
  46.     return hb
  47.   end
  48.   #--------------------------------------------------------------------------
  49.   # ● bitmap_data
  50.   #   获取当前画面的数据部分```
  51.   #   RGB依然是调转过来了`= =``
  52.   #--------------------------------------------------------------------------
  53.   def bitmap_data
  54.     hScrDC = CreateDC.call("DISPLAY", "", "", 0)
  55.     hMemDC = CreateCompatibleDC.call(hScrDC)
  56.     hBitmap = CreateCompatibleBitmap.call(hScrDC, 640, 480)
  57.     #BitBlt.call(hDC, 0, 0, 640, 480, hDC(0), 0, 0, SRCCOPY)
  58.     hOldBitmap = SelectObject.call(hMemDC, hBitmap)
  59.     BitBlt.call(hMemDC, xsrc, ysrc, 640*2, 480*2, hScrDC, 0, 0, SRCCOPY)
  60.     hBitmap = SelectObject.call(hMemDC, hOldBitmap)
  61.     dwCount = (640 * 480 * 4) * 2
  62.     lpBits = "\000" * dwCount
  63.     GetBitmapBits.call(hBitmap, dwCount, lpBits)
  64.     lpBits.delete!("\000")
  65.     return lpBits.unpack("C*")
  66.   end
  67.   #--------------------------------------------------------------------------
  68.   # ● 获取DC场景...
  69.   #--------------------------------------------------------------------------
  70.   def hDC(*h)
  71.     if h == []
  72.       return GetWindowDC.call(hWnd)
  73.     else
  74.       return GetDC.call(*h)
  75.     end
  76.   end
  77.   #--------------------------------------------------------------------------
  78.   # ● 用户窗口的位置
  79.   #--------------------------------------------------------------------------
  80.   def xsrc
  81.     return self.point[0]
  82.   end
  83.   #--------------------------------------------------------------------------
  84.   # ● 用户窗口的位置
  85.   #--------------------------------------------------------------------------
  86.   def ysrc
  87.     return self.point[1]
  88.   end
  89.   #--------------------------------------------------------------------------
  90.   # ● 那个点`= =``
  91.   #--------------------------------------------------------------------------
  92.   def point
  93.     point = [0,0].pack("LL")
  94.     ScreenToClient.call(hWnd, point)
  95.     return point.unpack("LL")
  96.   end
  97.   #--------------------------------------------------------------------------
  98.   # ● 窗口句柄
  99.   #--------------------------------------------------------------------------
  100.   def hWnd
  101.     game_name = "\0" * 256
  102.     GetPrivateProfileString.call("Game","Title","",game_name,255,".\\Game.ini")
  103.     game_name.delete!("\0")
  104.     return FindWindow.call("RGSS Player",game_name)
  105.   end
  106. end
复制代码



看到之前有人问能不能在XP下实现VX的Graphics.snap_to_bitmap
试了一下..然后.这东西就出来了``

就这样吧```
= =```只是理论出品...
因为set_pixel的惊人速度...所以平均一次要4.5秒左右才出来
-.-

Lv1.梦旅人

炎发灼眼的讨伐者

梦石
0
星屑
50
在线时间
1707 小时
注册时间
2007-8-4
帖子
904
2
发表于 2008-11-28 16:19:53 | 只看该作者
思思 用内存拷贝= ={/hx}

还有注意ReleaseDC DeleteDC 哪些= =
RMXP&amp;RMVX通用Web化完成- -|||
回复 支持 反对

使用道具 举报

Lv2.观梦者

天仙

梦石
0
星屑
610
在线时间
184 小时
注册时间
2008-4-15
帖子
5023

贵宾

3
发表于 2008-11-28 19:22:49 | 只看该作者
发动传送技能.....
VA脚本开工中...
偷窃脚本1.0 - 已完成
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1624
在线时间
1609 小时
注册时间
2007-8-28
帖子
3253

第3届短篇游戏大赛主流游戏组冠军第1届Title华丽大赛新人奖

4
发表于 2008-11-28 19:54:21 | 只看该作者
以下引用灼眼的夏娜于2008-11-28 8:19:53的发言:

思思 用内存拷贝= =

还有注意ReleaseDC DeleteDC 哪些= =


[本贴由作者于 2008-11-28 8:26:55 最后编辑]

用内存也是500ms,总之就这个速度了
“我推荐你一个游戏吧,avg的,剧情特感人”
“我擦,都是文字图片的游戏有啥好玩的,连个战斗都没有!”
“我推荐你一个游戏吧,rpg的,战斗也新颖”
“我擦,怎么米有作i弊器?“
”你不是喜欢战斗么?”
“不,我是剧情党!!”

继续阅读请点击
http://rpg.blue/blog-53316-10027.html
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (暗夜天使)

精灵族の天使

梦石
0
星屑
1697
在线时间
3038 小时
注册时间
2007-3-16
帖子
33731

开拓者贵宾

5
发表于 2008-11-28 19:54:44 | 只看该作者
思思啊……这样的话制作XP版新的截图存档就有希望了耶……
回复 支持 反对

使用道具 举报

Lv1.梦旅人

龙皇

梦石
0
星屑
50
在线时间
83 小时
注册时间
2007-8-8
帖子
2956
6
发表于 2008-11-28 20:37:11 | 只看该作者
有人可以说明一下 这个是干吗用的???

                签名图来自:無限のファンタジア
                 我的RMXP专题空间--龙使传说
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1624
在线时间
1609 小时
注册时间
2007-8-28
帖子
3253

第3届短篇游戏大赛主流游戏组冠军第1届Title华丽大赛新人奖

7
发表于 2008-11-28 20:42:16 | 只看该作者
以下引用TERENCE于2008-11-28 12:37:11的发言:

有人可以说明一下 这个是干吗用的???

xp截图用{/hx}
“我推荐你一个游戏吧,avg的,剧情特感人”
“我擦,都是文字图片的游戏有啥好玩的,连个战斗都没有!”
“我推荐你一个游戏吧,rpg的,战斗也新颖”
“我擦,怎么米有作i弊器?“
”你不是喜欢战斗么?”
“不,我是剧情党!!”

继续阅读请点击
http://rpg.blue/blog-53316-10027.html
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (暗夜天使)

精灵族の天使

梦石
0
星屑
1697
在线时间
3038 小时
注册时间
2007-3-16
帖子
33731

开拓者贵宾

8
发表于 2008-11-28 20:45:42 | 只看该作者
根据VX的说明文件。
Graphics.snap_to_bitmap (RGSS2)
将当前游戏画面截图存为位图对象。
所指向的是显现出来的图像,与调用 freeze 方法没有关联。
所生成的位图在不使用时必须被释放掉。
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2008-10-20
帖子
88
9
发表于 2008-11-28 20:48:38 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

Lv1.梦旅人

龙皇

梦石
0
星屑
50
在线时间
83 小时
注册时间
2007-8-8
帖子
2956
10
发表于 2008-11-28 21:05:12 | 只看该作者
以下引用柳之一于2008-11-28 12:42:16的发言:
xp截图用
以下引用精灵使者于2008-11-28 12:45:42的发言:

根据VX的说明文件。
Graphics.snap_to_bitmap (RGSS2)
将当前游戏画面截图存为位图对象。
所指向的是显现出来的图像,与调用 freeze 方法没有关联。
所生成的位图在不使用时必须被释放掉。

感谢二位高手的解释
......

                签名图来自:無限のファンタジア
                 我的RMXP专题空间--龙使传说
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-4-20 23:41

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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