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

Project1

 找回密码
 注册会员
搜索
查看: 7487|回复: 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
在线时间
462 小时
注册时间
2007-7-30
帖子
643
19
发表于 2010-7-1 13:18:09 | 只看该作者
有个问题:
当窗体被遮蔽一部份时
截图中会变黑色
RGE这万年大坑 啥时填起来@@

回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
55
在线时间
446 小时
注册时间
2006-11-18
帖子
1686
18
发表于 2008-12-5 21:22:28 | 只看该作者
以下引用精灵使者于2008-11-28 11:54:44的发言:

思思啊……这样的话制作XP版新的截图存档就有希望了耶……


对啊!....我的超华丽自制素材游戏就有希望了{/cy}
回复 支持 反对

使用道具 举报

Lv1.梦旅人

B

梦石
0
星屑
50
在线时间
26 小时
注册时间
2007-8-26
帖子
3693
17
发表于 2008-11-30 10:27:33 | 只看该作者
发布完毕
http://rpg.blue/web/htm/news1202.htm
vip += 2
回复 支持 反对

使用道具 举报

Lv2.观梦者

傻♂逼

梦石
0
星屑
369
在线时间
1605 小时
注册时间
2007-3-13
帖子
6562

烫烫烫开拓者

16
发表于 2008-11-30 06:11:11 | 只看该作者
以下引用Una于2008-11-29 21:20:27的发言:


以下引用yangff于2008-11-29 19:31:33的发言:

其实,偷偷的说,我只要一个API


如果自己写DLL的话返回一个指针确实可以....

但是有个问题就是怎么把PICTURE转成BITMAP
哎呀,蛋疼什么的最有爱了
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
15
在线时间
0 小时
注册时间
2008-11-30
帖子
3
15
发表于 2008-11-30 05:20:27 | 只看该作者
以下引用yangff于2008-11-29 19:31:33的发言:

其实,偷偷的说,我只要一个API

如果自己写DLL的话返回一个指针确实可以....
回复 支持 反对

使用道具 举报

Lv2.观梦者

傻♂逼

梦石
0
星屑
369
在线时间
1605 小时
注册时间
2007-3-13
帖子
6562

烫烫烫开拓者

14
发表于 2008-11-30 03:31:33 | 只看该作者
其实,偷偷的说,我只要一个API
哎呀,蛋疼什么的最有爱了
回复 支持 反对

使用道具 举报

Lv1.梦旅人

粉蜘蛛秀秀

梦石
0
星屑
76
在线时间
39 小时
注册时间
2007-6-4
帖子
384

贵宾第1届Title华丽大赛新人奖

13
发表于 2008-11-29 00:12:08 | 只看该作者
神思前辈也复出了 {/hx}
http://rpg.blue/upload_program/files/hide_xiu_96911465.png
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

6r最強害蟲!

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

使用道具 举报

Lv3.寻梦者

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

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

11
发表于 2009-6-12 08:00:00 | 只看该作者
以下引用TERENCE于2008-11-28 13:05:12的发言:


以下引用柳之一于2008-11-28 12:42:16的发言:
xp截图用



以下引用精灵使者于2008-11-28 12:45:42的发言:

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


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

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

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-5-4 08:51

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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