易码技术论坛

 找回密码
 加入易码
搜索
查看: 3670|回复: 20

[源码] 可怕的灰度图片滚屏

[复制链接]
发表于 2008-11-16 14:14:21 | 显示全部楼层 |阅读模式
那天闲来无事,写来了个灰度图片的滚屏测试(全屏,再向右滚出屏幕,没有复制粘贴)。测试的结果……那速度……啊……10MHz的CPU尽力了(我的TC808)……

char pic[1600];
void main()
{char i,j,fp;
fp=fopen("/开机画面/xxx.ski","r")
for(i=0;;i++)
    {if(ftell(fp)==24000)
       rewind;
     for(j=0;j<15;j++)
        {fread(pic,1,1600,fp);
         WriteBlock(0+i,0,160,80,1,pic);
         Refresh;
        }
     ClearScreen;
     if(CheckKey(27)!=0)
       break;
    }
fclose(fp)
getchar;
}

外层循环是图片移动控制,内层循环是在当前位置刷一次16灰度图片(所以循环次数为15)。
做完后我有要超频的冲动……莫非只有汇编才能让它更快?
(代码是个意思,如果有错,纯属手误。这帖是我在网吧发的)

[ 本帖最后由 snakegtx901 于 2008-11-23 11:18 编辑 ]
发表于 2008-11-16 17:01:16 | 显示全部楼层
用4灰度是不是会快一些。
另外,以前有人做过火纹片头动画,用的是伪16灰度,速度也不慢啊……
发表于 2008-11-16 17:44:14 | 显示全部楼层
少用几次fread试试。
发表于 2008-11-16 19:13:22 | 显示全部楼层
毕竟是模拟的
发表于 2008-11-18 15:49:17 | 显示全部楼层
原帖由 dragon_ 于 2008-11-16 17:44 发表
少用几次fread试试。

多利用20K的内存
还有这句
WriteBlock(0+i,0,160,80,1,pic);

0+i实在是令人费解
发表于 2008-11-19 10:06:57 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2008-11-19 19:54:06 | 显示全部楼层
原帖由 snakegtx901 于 2008-11-16 14:14 发表
……那速度……啊……10MHz的CPU尽力了……

...

看到这句话让我想起来,在个PDA论坛有人发出来一个PPC ARM用的GCC编译器,可以在PPC上直接把c或c++编译为exe,然后一个所谓的专业程序员说PPC硬件配置低,输入不方便,并且对在PPC上编译程序感到不可理解,我就想了,像我们用的wqx型号的cpu只有8位,连10MHz都不到,和PPC比起来差远了,要是他们知道我们在配置这么低的平台上写程序不就更理解不了了呢,还有,以前有人提出来在wqx上编译lavax,也有人去解释因为什么原因,根本不能在wqx上编译,可后来还是有人做出来了……
============
抱歉,跑题了……

[ 本帖最后由 POTO 于 2008-11-19 19:55 编辑 ]
 楼主| 发表于 2008-11-21 10:26:24 | 显示全部楼层
不好意思,才有时间上线.纠正一下帖的错误.ftell(fp)=24000才对,少写了.至于那个i,是让图像平移的,XDraw做不到(在这个例子中,不信你试试)
我在练习做游戏.其实我也不想用16,可四灰的图不会用.所讣先找个替代的练.

[ 本帖最后由 snakegtx901 于 2008-11-23 11:18 编辑 ]
 楼主| 发表于 2008-11-21 10:36:39 | 显示全部楼层
关于16,读到内存里快了点.后来改了一下,内层循环刷四幅更快,只不过色彩......
ChgPic.y的16转4不会用,16的图有24k,内存才20k,怎么用啊.
 楼主| 发表于 2008-11-21 10:52:03 | 显示全部楼层
刚搜索了帖子,有关四灰图格式的找不到.谁给我讲讲四灰图啊?
发表于 2008-11-21 12:07:31 | 显示全部楼层
你看看这样行不行
include <ChgPic.y>
char 16pic[ ]={ ....  }; //16灰度图片
char temp[16384]; //准备放4灰度图片
void main()
{
Chg16to4(temp,16pic,strlen(16pic));
}
我感觉这个方法很费内存,而且速度很慢,最好事先把16灰度的转成4灰度的,再用链接库调用SetGraphMode(4);切换到4灰度模式下,这样做比较好……
实际上,wqx用的4灰度图像就是从16灰度调色板中抽4种颜色拿来显示罢了……
16灰度转4灰度可以用leesoft的最新版seestar

[ 本帖最后由 POTO 于 2008-11-21 12:12 编辑 ]

新建 WinRAR 压缩文件.rar

43.5 KB, 下载次数: 253

seestar,可以转4灰度……

发表于 2008-11-21 13:10:45 | 显示全部楼层
说说本人以前写的经验吧,首先16灰内存肯定是不够的,所以你必须把资源放到文件里面,再读出来刷屏。这个就是16灰的显示方法了,只要你资源会处理就没问题。

不过做4灰的,我不知道Yan的库怎么样(星星坏了的说……),但只要是模拟的估计都不行,不过Yan好像把系统的屏幕本身的4灰性能弄出来了,所以你可以试试。

其实模拟16灰可以做得很流畅的,就是不能掩膜……
发表于 2008-11-21 17:40:52 | 显示全部楼层
原帖由 POTO 于 2008-11-21 12:07 发表
你看看这样行不行
include
char 16pic[ ]={ ....  }; //16灰度图片
char temp[16384]; //准备放4灰度图片
void main()
{
Chg16to4(temp,16pic,strlen(16pic));
}
我感觉这个方法很费内存,而且速度很慢,最好事先把16 ...

Lee那个转出来的4灰度数据和显存的格式不一样,如果用那个,显示时要特别处理,效率不高。
建议直接把4灰度数据格式和显存格式统一。
发表于 2008-11-21 17:42:26 | 显示全部楼层
原帖由 绿鸟 于 2008-11-21 13:10 发表
说说本人以前写的经验吧,首先16灰内存肯定是不够的,所以你必须把资源放到文件里面,再读出来刷屏。这个就是16灰的显示方法了,只要你资源会处理就没问题。

不过做4灰的,我不知道Yan的库怎么样(星星坏了的说……),但只要是模拟 ...

4灰度的模拟游戏也是有的啊。
不过硬件4灰度的效果也不是很好。
发表于 2008-11-21 18:03:46 | 显示全部楼层

回复 14# 的帖子

软件模拟的速度跟得上吗?
还有掩膜效果怎么处理呢?
如果不掩膜图像效果就不好了,因为没有游戏是1个图层吧?
 楼主| 发表于 2008-11-21 18:29:09 | 显示全部楼层
方法我试了,不理想,和POTO的感觉一样。行,那我就在电脑上转。回绿鸟,808是硬件灰度,不是模拟。
我现在想知道灰度文件的结构。毕竟4的文件大小比16的多一倍,一定有不一样的地方。那4灰的文件该怎么读?
另外,能直接在808上做4灰的图吗?
 楼主| 发表于 2008-11-21 18:40:28 | 显示全部楼层
16是一幅幅刷的,4的是直接显示啊!
发表于 2008-11-21 23:29:22 | 显示全部楼层
原帖由 绿鸟 于 2008-11-21 18:03 发表
软件模拟的速度跟得上吗?
还有掩膜效果怎么处理呢?
如果不掩膜图像效果就不好了,因为没有游戏是1个图层吧?

软件模拟效果不算好。
我没细看,不过似乎没有掩膜的函数,所以……自己操作显存吧。
发表于 2008-11-21 23:30:28 | 显示全部楼层
原帖由 snakegtx901 于 2008-11-21 18:29 发表
方法我试了,不理想,和POTO的感觉一样。行,那我就在电脑上转。回绿鸟,808是硬件灰度,不是模拟。
我现在想知道灰度文件的结构。毕竟4的文件大小比16的多一倍,一定有不一样的地方。那4灰的文件该怎么读?
另外,能直接在808上做4 ...

4的文件大小比16的多一倍 应该是小一半吧。
4灰度是两个bit代表一个像素点,所以一个Byte可以存储4个像素的颜色值。像素的排列顺序和黑白一样,是从左到右,从上到下。
具体实现看楼主了。

[ 本帖最后由 dragon_ 于 2008-11-22 00:20 编辑 ]
发表于 2008-11-22 00:23:34 | 显示全部楼层
原帖由 snakegtx901 于 2008-11-21 18:40 发表
16是一幅幅刷的,4的是直接显示啊!

在808上做4灰的图?只要把格式搞明白了就行。
显示图片只要把4灰度的图片数据刷入$1380~$1fff即可。
您需要登录后才可以回帖 登录 | 加入易码

本版积分规则

Archiver|手机版|小黑屋|EMAX Studio

GMT+8, 2024-4-26 08:52 , Processed in 0.015547 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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