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

Project1

 找回密码
 注册会员
搜索
楼主: 轮回者
打印 上一主题 下一主题

[原创发布] 将Bitmap对象输出成PNG文件 优化版

 关闭 [复制链接]

Lv1.梦旅人

逃兵

21
 楼主| 发表于 2006-11-20 21:18:08 | 只看该作者
比如:

    for y in 0...h
Graphic.update
      1.times do
        data.push(0)
      end

(不要怪我分开打,我们学校的机器烂的可以……-_-b)
「If you judge people, you have no time to love them.」—— Mother Teresa
回复 支持 反对

使用道具 举报

Lv1.梦旅人

66RPG站长

梦石
0
星屑
54
在线时间
615 小时
注册时间
2005-10-10
帖子
5734

RMVX自由创作大赛亚军第2届短篇游戏比赛亚军第5届短篇游戏比赛冠军

22
发表于 2006-11-20 21:52:10 | 只看该作者
以下引用轮回者于2006-11-20 13:18:08的发言:

比如:

   for y in 0...h
Graphic.update
     1.times do
       data.push(0)
     end

(不要怪我分开打,我们学校的机器烂的可以……-_-b)

绝对不行,2000×1000的图得刷到猴年马月

我本来是设计

if Time.now.to_i - @tm >= 5
  Graphics.update
  @tm = Time.now.to_i
end

但是实际上图一大了,内存碎片就多,最后根本输不出来。能不能先在开始前声明3~5M的内存空间?
回复 支持 反对

使用道具 举报

Lv1.梦旅人

逃兵

23
 楼主| 发表于 2006-11-21 01:04:37 | 只看该作者
这个……似乎超出我能力范围了。

转bmp的有这种问题么?

或者
if Time.now.to_i - @tm >= 5
p "处理中"
@tm = Time.now.to_i
end
「If you judge people, you have no time to love them.」—— Mother Teresa
回复 支持 反对

使用道具 举报

Lv1.梦旅人

逃兵

24
 楼主| 发表于 2006-11-21 16:22:35 | 只看该作者
看看这次的
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
50 小时
注册时间
2006-11-16
帖子
3409
25
发表于 2006-11-21 18:42:34 | 只看该作者
没发现在楼顶更新了,不好意思。
最近好多想到PM的问题……不会嫌我烦了吧……
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
50 小时
注册时间
2006-11-16
帖子
3409
26
发表于 2006-11-21 19:20:20 | 只看该作者
对了,看到你在里面提到:

     2、由于Ruby::IO输出"\x0a"时实际输出的是"\x0d\x0a",导致生成Png文件
        时会出现错误,所以实际是用Zlib输出的.gz的压缩文件,需自己解压。
(png_file 第24行)

这个是有办法的,上次在你哪个帖子里面看到,忘了和你说一下(那个帖子找不到了)
是在write之前,加一句:
file.binmode

比如你试试看这个:
file = File.open("IOtest.txt","w")  
file.binmode
file.write("\x0a")
file.write("\n")
file.write("\cJ")
# 三句话的意思一样,都是写\x0a
file.close

注意,这个binmode之后,是不能从二进制模式回到文本模式的(如果要用,只能退出重开,F1里面就是这么写的),我没仔细的看你这个bmp转png的全程序,到底是哪里要写\x0a,如果你从头到尾都是在写二进制的图片文件,而不是在写文章,那我建议你还是直接用binmode,还可以避免些其他情况(比如空格和0的情况等等)
最近好多想到PM的问题……不会嫌我烦了吧……
回复 支持 反对

使用道具 举报

Lv1.梦旅人

有事烧纸

梦石
0
星屑
154
在线时间
509 小时
注册时间
2005-10-22
帖子
6982

贵宾VX城市地图大赛冠军第1届RMTV比赛冠军第1届TG大赛冠军

27
发表于 2006-11-21 20:45:31 | 只看该作者
以下引用金圭子于2006-11-21 11:20:20的发言:

对了,看到你在里面提到:

    2、由于Ruby::IO输出"\x0a"时实际输出的是"\x0d\x0a",导致生成Png文件
       时会出现错误,所以实际是用Zlib输出的.gz的压缩文件,需自己解压。
(png_file 第24行)

这个是有办法的,上次在你哪个帖子里面看到,忘了和你说一下(那个帖子找不到了)
是在write之前,加一句:
file.binmode

比如你试试看这个:
file = File.open("IOtest.txt","w")  
file.binmode
file.write("\x0a")
file.write("\n")
file.write("\cJ")
# 三句话的意思一样,都是写\x0a
file.close

注意,这个binmode之后,是不能从二进制模式回到文本模式的(如果要用,只能退出重开,F1里面就是这么写的),我没仔细的看你这个bmp转png的全程序,到底是哪里要写\x0a,如果你从头到尾都是在写二进制的图片文件,而不是在写文章,那我建议你还是直接用binmode,还可以避免些其他情况(比如空格和0的情况等等)


呵呵 直接 file = open("IOtest.txt","wb")即可``
神隐中,偶尔诈尸
回复 支持 反对

使用道具 举报

Lv1.梦旅人

逃兵

28
 楼主| 发表于 2006-11-21 20:59:53 | 只看该作者
多谢楼上的了
恩,回家试试
一直不知道file.binmode是干什么的……
「If you judge people, you have no time to love them.」—— Mother Teresa
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
50 小时
注册时间
2006-11-16
帖子
3409
29
发表于 2006-11-21 21:29:15 | 只看该作者
以下引用灼眼的夏娜于2006-11-21 12:45:31的发言:
呵呵 直接 file = open("IOtest.txt","wb")即可``

嗯,也是。
to轮回者:我也是看到你这个,然后去F1帮助里面搜索了一下write。
然后发现的确只有一个write,就看到write上面几个就有binmode,抱着试试看的想法,直接用,不行,然后去baidu搜索“ruby binmode”,才学到怎么用的。用了用可以,就发给你了。
倒是忘了几乎所有的用open方式,有w的,几乎都有r、w、b等等方式的。
见笑了~~
最近好多想到PM的问题……不会嫌我烦了吧……
回复 支持 反对

使用道具 举报

Lv1.梦旅人

有事烧纸

梦石
0
星屑
154
在线时间
509 小时
注册时间
2005-10-22
帖子
6982

贵宾VX城市地图大赛冠军第1届RMTV比赛冠军第1届TG大赛冠军

30
发表于 2006-11-22 19:53:40 | 只看该作者
呵呵,提供一个crc码计算方法`````

方法一:
def make_crc_table
  crc_table = []
  for i in 0...256
    c = i
    for j in 0...8
      if (c & 1) == 1
        c = 0xedb88320^(c>>1)
      else
        c = c>>1
      end
    end
    crc_table = c
  end
  return crc_table
end

def crc_make(string)
  crc_table = self.make_crc_table
  c = 0xffffffff
  for i in 0...string.size
    c = crc_table[(c^string)&0xff]^(c>>8)
  end
  return c^0xffffffff
end

p sprintf("%x",crc_make("IEND"))

方法二:
Zlib.crc_table          # crc_table
Zlib.crc32(string)      # crc 码
Zlib.adler32(string)    # adler 码
神隐中,偶尔诈尸
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-4-29 16:15

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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