赞 | 2 |
VIP | 143 |
好人卡 | 1 |
积分 | 1 |
经验 | 216792 |
最后登录 | 2019-10-10 |
在线时间 | 24 小时 |
Lv1.梦旅人
- 梦石
- 0
- 星屑
- 61
- 在线时间
- 24 小时
- 注册时间
- 2008-8-5
- 帖子
- 1924
|
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感谢您的热情解答~ |
|