游戏开发论坛

 找回密码
 立即注册
搜索
楼主: 轩辕崇正

想了一个图像压缩的算法,不知可不可行.

[复制链接]

77

主题

485

帖子

486

积分

中级会员

Rank: 3Rank: 3

积分
486
发表于 2011-3-13 15:20:00 | 显示全部楼层

Re:想了一个图像压缩的算法,不知可不可行.

不管你是什么算法,不可能读取速度又快,文件又小.
因为要解压缩,读取的速度和文件的容量是成反比的.

1

主题

49

帖子

49

积分

注册会员

Rank: 2

积分
49
发表于 2011-3-13 18:51:00 | 显示全部楼层

Re:想了一个图像压缩的算法,不知可不可行.

大话那个是缓冲技术,不是压缩技术..

0

主题

5

帖子

5

积分

新手上路

Rank: 1

积分
5
发表于 2011-3-13 19:36:00 | 显示全部楼层

Re:想了一个图像压缩的算法,不知可不可行.

谢谢分享啊~~~

23

主题

515

帖子

552

积分

高级会员

Rank: 4

积分
552
发表于 2011-3-13 20:42:00 | 显示全部楼层

Re:想了一个图像压缩的算法,不知可不可行.

首先不用把精力耗费在无意义的算法上。

你的算法好或者坏不重要。重要的是已经有大量的先驱者在你还没有出生的时候就在为图像压缩做出着不懈的努力。很多时候可以参考他们的经验。因为不同的场合,可以使用不同的压缩算法

其次png耗费1200ms我不知道你是读取了多少个文件测试的结果。
至少关于IO优化的讨论有很多。而且我不太相信你比png的制作者更牛逼。


最后优化的关键是要找瓶颈。
读盘慢可以用异步加载,2D游戏的背景图可以考虑使用jpeg,大话的压缩技能可能受益于jpeg。
如果是3D模型用图,可以考虑使用DXT。
如果是界面,考虑使用拼接图,这样可以减少大量的图素。



额外说些废话,你那个类似于哈弗曼编码或者rle的东西,很多年前还是有些人会考虑使用的。

67

主题

390

帖子

392

积分

中级会员

Rank: 3Rank: 3

积分
392
 楼主| 发表于 2011-3-14 09:10:00 | 显示全部楼层

Re: Re:想了一个图像压缩的算法,不知可不可行.

happyking: Re:想了一个图像压缩的算法,不知可不可行.

PNG带有透明通道,而且文件小.
加载慢不是问题,游戏开始的时候,显示图片资源加载的滚动条.
让玩家等一会就行了.


这对场景加载不现实,我做的地图是整张的,大的有70~90M,不可能一下全加载进来。
需要动态加载,不过这个我已经用DXT1了,因为不含透明信息,创建纹理的速度几乎和BMP一样。
但还有很多东西是无法预先加载的,比如回合制战斗,每次切入战斗最多都要加载20多个人物,每个人物都有各种待机、战斗动画,加上技能动画,那图片数量可就很大了,比一次加载的场景块还大。

67

主题

390

帖子

392

积分

中级会员

Rank: 3Rank: 3

积分
392
 楼主| 发表于 2011-3-14 09:19:00 | 显示全部楼层

Re: Re:想了一个图像压缩的算法,不知可不可行.

疯子阿虹: Re:想了一个图像压缩的算法,不知可不可行.

首先不用把精力耗费在无意义的算法上。

你的算法好或者坏不重要。重要的是已经有大量的先驱者在你还没有...


1:异步加载是不是多线程加载?
2:场景块我用的是DXT1,其他的图由于几乎没有是2的次幂的,而且带半透明色,所以只能自己找适合的格式。
3:PNG我感觉不适合做游戏,因为我测试过,即便是使用了多线程加载PNG图片,甚至都能卡到主线程。(子线程每次加载25张256×256的图片,给主线程渲染)
4:PNG的测试,我是用D3DXCreateTextureFromFileEx()加载5张256×256的图片测试出来的。1100~1200毫秒左右,我的笔记本配置比较低,奔腾M的CPU,
5:我所提的压缩算法只为了解决角色动画、技能动画的压缩(除了全屏技能动画是640×480的,其他都在400×400以下)
6:你这么一说,我的确感到自己很多东西都不熟悉,造成很多认识很单一,IO优化这方面我还未了解过,还有像什么文件映射之类的。

67

主题

390

帖子

392

积分

中级会员

Rank: 3Rank: 3

积分
392
 楼主| 发表于 2011-3-14 09:21:00 | 显示全部楼层

Re: Re: Re:想了一个图像压缩的算法,不知可不可行.

TV游戏: Re: Re:想了一个图像压缩的算法,不知可不可行.

人家是专业的


我目前是用的TGA 32位RLE压缩格式,由于9M的图片(N张图片)只能压到2.5M,而大话的was文件却能压到900K,所以,我想尝试看看有没有压的更好的格式。TGA读取的速度的确可以。如果实在找不到比TGA更好的,我最终也只能选择TGA了。
我只想知道2D游戏,像人物动画这种图片,应该用什么格式存储,使用什么压缩方式,我的想法也正是在试图找一个解决方案。
如果您知道我该选择什么样的压缩方式,我一定会尝试,如果测试速度很慢,那我也没办法了。

2万

主题

2万

帖子

6万

积分

论坛元老

Rank: 8Rank: 8

积分
66489
QQ
发表于 2011-3-14 09:54:00 | 显示全部楼层

Re:想了一个图像压缩的算法,不知可不可行.

发现你们都挺人才

PNG小是因为用了ZIP进压缩。PNG读取起来慢主要也是因为ZIP压缩的关系,ZIP算法解压过慢。

TGA确实是值得使用,它不压缩,所以你可以做成零处理。即读入文件后,不再做任何多余处理直接使用。

67

主题

390

帖子

392

积分

中级会员

Rank: 3Rank: 3

积分
392
 楼主| 发表于 2011-3-14 10:25:00 | 显示全部楼层

Re: Re:想了一个图像压缩的算法,不知可不可行.

hyzboy: Re:想了一个图像压缩的算法,不知可不可行.

发现你们都挺人才

PNG小是因为用了ZIP进压缩。PNG读取起来慢主要也是因为ZIP压缩的关系,ZIP算法解压过慢...


tga不压缩的话,那图像大小和BMP一样大。只能使用RLE压缩。

67

主题

390

帖子

392

积分

中级会员

Rank: 3Rank: 3

积分
392
 楼主| 发表于 2011-3-14 10:37:00 | 显示全部楼层

Re:想了一个图像压缩的算法,不知可不可行.

我重新测了一下was文件和tga压缩的大小,
一张238×207的TGA未压缩的图片大小是:197082字节=192K
TGA用32位rle压缩后的大小:54884字节=53K
大话的was文件大小:19090字节=18.6K

另外看了一下was的文件格式,恍然大悟,原来所谓的压缩不过是存储技巧,它可以用很少很少的字节就能把很多像素给存储起来。他每个像素才1个字节,却能表示4个字节的像素,他的像素数量竟可以远低于PixWidth&#215ixHeight
看来这并不是单纯的rle,而是高级的字节存储技巧。这对游戏图像太有帮助了。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-6-9 22:56

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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