Project1

标题: VX保存图片 [打印本页]

作者: yangff    时间: 2008-2-5 21:14
标题: VX保存图片
先别激动,我说的图片是rvpic。
众所周知,RGSS里无法直接保存图片。
一般保存PNG使用轮回大大的PNG脚本
效率及底。
这个脚本输出速度比轮回者的快
并且有两种版本
一种输出544*416只要2~4秒
但是输出文件高达7.8MB
---------------------------
另外一种是高压缩比例
输出>20秒
容易死机
但输出后只有200KB
并且不影响质量
------------------------
读入均为2~4S
使用方法
保存
a = Pic.new
a.save_bitmap(bitmap对象,输出名称)
载入
a = Pic.new
bitmap对象 = a.load_bitmap
高速型:

  1. class Pic
  2.   def save_bitmap(bitmap,name)
  3.     @name = name
  4.     @bitmap = bitmap
  5.    # bitmap.dispose
  6.     $save = []
  7.     @w = @bitmap.width
  8.     @h = @bitmap.height
  9.     for x in 1..@w
  10.       for y in 1..@h
  11.         tmp = @bitmap.get_pixel(x,y)
  12.         $save[x] = [] if $save[x] == nil
  13.         $save[x][y] = tmp
  14.       end
  15.     end
  16.     save($save)
  17.   end
  18.   def save(dat)
  19.     $datehand = []
  20.     $datehand[0] = @w
  21.     $datehand[1] = @h
  22.    # $save = Zlib::Deflate.deflate($save.to_s, 2)
  23.     file = File.open(@name, "wb")
  24.     Marshal.dump($datehand,           file)
  25.     Marshal.dump($save,               file)
  26.     file.close
  27.   end
  28.   def load_bitmap(name)
  29.     load(name)
  30.     @name = name
  31.     @w = $datehand[0]
  32.     @h = $datehand[1]
  33.     @bitmap = Bitmap.new(@w,@h)
  34.    # $save = Zlib::Inflate.inflate($save)
  35. #    $save1 = $save.to_ary
  36. #    $save = $save1
  37.     for x in 1..@w
  38.       for y in 1..@h
  39.         @bitmap.set_pixel(x, y, tmp)
  40.       end
  41.     end
  42.     return @bitmap
  43.   end
  44.   def load(name)
  45.     file = File.open(name, "rb")
  46.     $datehand           = Marshal.load(file)
  47.     $save               = Marshal.load(file)
  48.     file.close
  49.   end
  50. end
复制代码

高压缩比:
  1. class Pic
  2.   def save_bitmap(bitmap,name)
  3.     @name = name
  4.     @bitmap = bitmap
  5.    # bitmap.dispose
  6.     $save = []
  7.     @w = @bitmap.width
  8.     @h = @bitmap.height
  9.     for x in 1..@w
  10.       for y in 1..@h
  11.         tmp = @bitmap.get_pixel(x,y)
  12.         $save[x] = [] if $save[x] == nil
  13.         $save[x][y] = [] if $save[x][y] == nil #tmp
  14.         $save[x][y][0] = tmp.red
  15.         $save[x][y][1] = tmp.green
  16.         $save[x][y][2] = tmp.blue
  17.         $save[x][y][3] = tmp.alpha
  18.       end
  19.     end
  20.     save($save)
  21.   end
  22.   def save(dat)
  23.     $datehand = []
  24.     $datehand[0] = @w
  25.     $datehand[1] = @h
  26.     $save = Zlib::Deflate.deflate($save.to_s, 2) #修改 2)为更高压缩比更大,速度更慢
  27.     file = File.open(@name, "wb")
  28.     Marshal.dump($datehand,           file)
  29.     Marshal.dump($save,               file)
  30.     file.close
  31.   end
  32.   def load_bitmap(name)
  33.     load(name)
  34.     @name = name
  35.     @w = $datehand[0]
  36.     @h = $datehand[1]
  37.     @bitmap = Bitmap.new(@w,@h)
  38.     $save = Zlib::Inflate.inflate($save)
  39. #    $save1 = $save.to_ary
  40. #    $save = $save1
  41.     for x in 1..@w
  42.       for y in 1..@h
  43.         a = Color.new($save[x][y][0], $save[x][y][1], $save[x][y][2],$save[x][y][3])
  44.         @bitmap.set_pixel(x, y, a)
  45.       end
  46.     end
  47.     return @bitmap
  48.   end
  49.   def load(name)
  50.     file = File.open(name, "rb")
  51.     $datehand           = Marshal.load(file)
  52.     $save               = Marshal.load(file)
  53.     file.close
  54.   end
  55. end
复制代码

作者: superufo    时间: 2008-2-5 21:17
提示: 作者被禁止或删除 内容自动屏蔽
作者: zmgy    时间: 2008-2-5 22:17
提示: 作者被禁止或删除 内容自动屏蔽
作者: yangff    时间: 2008-2-6 00:05
以下引用zmgy于2008-2-5 14:17:26的发言:

话说能把BMP格式变成JPEG或者GIF格式不?那样无论从速度或容量上来说都会小很多的说

输出的是.rvpic




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1