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

Project1

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

有关graphic_snap_to_bitmap

 关闭 [复制链接]

Lv3.寻梦者 (暗夜天使)

精灵族の天使

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

开拓者贵宾

跳转到指定楼层
1
发表于 2009-5-19 02:46:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
听说有人开发了graphics_snap_to_bitmap的XP版本,但是我不知道如何来使用。
仅仅知道是截取游戏本身的游戏画面,但是不知道具体规则和格式用法。
需要的话,请帮我举个范例说明一下。
谢了。
VX的这个函数的说明里面写得很简略……
  # ● 截图做下一个画面的背景
  #--------------------------------------------------------------------------
  def snapshot_for_background
    $game_temp.background_bitmap.dispose
    $game_temp.background_bitmap = Graphics.snap_to_bitmap
    $game_temp.background_bitmap.blur
  end
  #--------------------------------------------------------------------------
  # ● 生成菜单画面背景
  #--------------------------------------------------------------------------
  def create_menu_background
    @menuback_sprite = Sprite.new
    @menuback_sprite.bitmap = $game_temp.background_bitmap
    @menuback_sprite.color.set(16, 16, 16, 128)
    update_menu_background
  end
仅仅VX的这里找到一些蛛丝马迹……如何使用呢。 [LINE]1,#dddddd[/LINE]本贴由论坛斑竹精灵使者结贴,如楼主认为问题未解决,请重新将此贴编辑为“有事请教”,并回帖叙述疑点即可~ ^-^

Lv1.梦旅人

梦石
0
星屑
61
在线时间
24 小时
注册时间
2008-8-5
帖子
1924
2
发表于 2009-5-19 13:23:44 | 只看该作者
http://rpg.blue/viewthread.php?tid=111145&ntime=2009%2D5%2D19+5%3A08%3A25

这个吗?

直接调用 Graphics.snap_to_bitmap,它返回一个 RGSS 位图的对象,位图的内容是当前的窗口客户区的整个画面(由 Bitmap 的 set_pixel 这个方法来逐点拷贝从 DC 获取的位图)

返回的位图可以被描绘在窗口的 self.contents 中,也可以直接显示在一个精灵中,比如:
s = Sprite.new
s.bitmap = Graphics.snap_to_bitmap
s.zoom_x = 0.5
s.zoom_y = 0.5

这样就会在屏幕左上角显示一个缩放后的当前游戏画面截图~
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (暗夜天使)

精灵族の天使

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

开拓者贵宾

3
 楼主| 发表于 2009-5-19 21:25:56 | 只看该作者
self.contents.bitmap = Graphics.snap_to_bitmap

这个可以MASHAL进存档么?
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
46
在线时间
10 小时
注册时间
2007-5-27
帖子
2558

第1届Title华丽大赛新人奖

4
发表于 2009-5-20 06:06:48 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (暗夜天使)

精灵族の天使

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

开拓者贵宾

5
 楼主| 发表于 2009-5-20 16:47:50 | 只看该作者
以下引用沉影不器于2009-5-19 22:06:48的发言:

既然返回的是ruby的bitmap对象,mashal就没问题

沉影君居然露面了= =
XP可以用存储BITMAP的快速MASHAL么?如果可以的话如何写呢。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
61
在线时间
24 小时
注册时间
2008-8-5
帖子
1924
6
发表于 2009-5-20 18:47:57 | 只看该作者
XP 中和图像有关的内部类对象都是无法序列化(无法 Marshal.dump,也就是无法编组)的,因为实现这些类的代码在 DLL 中,RGSS 只是通过 API 来调用,除非定义 _dump 方法来自定义需要序列化的数据,否则在 Marshal.dump 位图的时候就会发生异常~

用神思这个脚本的话,可以把 bitmap_data 返回的位图数据数组对象序列化,然后需要读入位图的时候再用 snap_to_bitmap 的算法把数组中的数据拷贝到 RGSS 的 Bitmap 中

比如写如下代码抓屏后把位图数据保存在 Data/bitmap.rxdata:
File.open("Data/bitmap.rxdata", "wb") {
|fout|
rgbs = Marshal.dump(Graphics.bitmap_data,
fout)
}

然后在 class << Graphics 中定义一个方法 bitdata_to_bitmap:
  #--------------------------------------------------------------------------
  # ● snap_to_bitmap
  #   将位图位数据转换为 Bitmap 对象
  #--------------------------------------------------------------------------
  def bitdata_to_bitmap
    hb = Bitmap.new(640,480)
    #rgbs = self.bitmap_data
    rgbs = nil
    File.open("Data/bitmap.rxdata", "rb") { |fin|
      rgbs = Marshal.load(fin)
    }

    x=y=0
    indexs = [0]
    for i in indexs
      break if rgbs.nil?
      break if rgbs[i+1].nil?
      break if rgbs[i+2].nil?
      break if rgbs[i+3].nil?
      color = Color.new(rgbs[i+2],rgbs[i+1],rgbs,rgbs[i+3])
      hb.set_pixel(x,y,color)
      x += 1
      if x == 640
        x = 0
        y += 1
      end
      indexs << i + 4
    end
    return hb
  end

这样,调用 Graphics.bitdata_to_bitmap 就能从 bitmap.rxdata 获取、建立并返回一个位图对象了
系统信息:本贴由本区版主认可,66RPG感谢您的热情解答~
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (暗夜天使)

精灵族の天使

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

开拓者贵宾

7
 楼主| 发表于 2009-5-22 16:57:18 | 只看该作者
嗯哪,有机会我开新工程测试。
如果可以保存的话,读取也按上面的方式读取?
我想修改以前的那个截图存档的脚本(使用DLL的)
你帮我解决了核心问题,所以就认可你了哦~
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
46
在线时间
10 小时
注册时间
2007-5-27
帖子
2558

第1届Title华丽大赛新人奖

8
发表于 2009-5-25 03:55:46 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (暗夜天使)

精灵族の天使

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

开拓者贵宾

9
 楼主| 发表于 2009-5-25 04:48:18 | 只看该作者
以下引用沉影不器于2009-5-24 19:55:46的发言:

楼主指的修改dll截图存档是想去掉dll么?改法跟我的vx脚本完全无二的,用了柳之一提供的marshal脚本后,bitmap跟普通对象一样存和读的...楼上上提供的逐点法,哎...

这样啊。
我修改了好几次都失败了……有机会帮我下。
p.s.存档脚本很早就想解决那个BUG了。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2025-1-11 04:50

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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