易码技术论坛

 找回密码
 加入易码
搜索
查看: 1783|回复: 18

[求助] HELP关于数组

[复制链接]
发表于 2008-7-5 23:43:10 | 显示全部楼层 |阅读模式
这几天考完了...是人也完了....

在LAVA中定义一个图形数组应该怎么定义啊,付值呢,然后用WriteBlock()调用呢?

谢谢了
发表于 2008-7-6 08:12:27 | 显示全部楼层
char pic[大小,图片长×int((图片宽+7)/8)]={16进制代码,就是0xff啥的};
可用一些处理工具将图片自动转成目标代码,然后复制进去即可,那个大小定义时也可以不填的,不过建议做成dat文件,然后读取,节省速度
writeblock(想画地方的x,想画地方的y,图片长,图片宽,绘图模式,pic);
要实现掩膜功能就需要改绘图模式
做掩膜…首先制作需要透明的图片pic[],然后是掩膜yanmopic[],最后背景back[],注制作掩膜,直接原图片反色加橡皮擦,留轮廓外框
先writeblock绘背景back[],模式1
接着writeblock绘掩膜,模式4
再来writeblock绘原图pic[],模式3
最后refresh()刷出来
 楼主| 发表于 2008-7-6 13:31:36 | 显示全部楼层
谢谢,我明白了你的意思了,只是char pic[],我想使用数组是char pic[3][]={...},还是char pic[][3]={...},都行不通啊.或是char tu[3];tu[1][]={....};也是出错,应该怎么使数组代表一些图呢?谢谢啊
发表于 2008-7-6 13:54:39 | 显示全部楼层
看图片说话了
#define SIZE (SIZE的大小是你图片的长*宽/8)
然后
char  pic=[][SIZE]={..............(数据)};
第一个[]中的参数可以不填,自动根据你的图片数据来定..(也可以填)
如果你的图片是5张160*80的图片
那么
char pic[5][160*80/8(其实=1600)]={........};
 楼主| 发表于 2008-7-6 15:03:20 | 显示全部楼层
char pic[5][1600]={
.................
};


void main()
{
    ClearScreen();
    WriteBlock(0,0,160,80,1,pic[5]);
    Refresh();
    getchar();
}

我这么写怎么什么都没显示

char pic[][1600]={
.................
};


void main()
{
    ClearScreen();
    WriteBlock(0,0,160,80,1,pic);
    Refresh();
    getchar();
}
可这么写又对了,可我想用数组啊.........
发表于 2008-7-6 15:20:12 | 显示全部楼层
char pic[5][1600]={
.................
};


void main()
{
    ClearScreen();
    WriteBlock(0,0,160,80,1,pic[n]);//注意这里的N,N表示你要显示第几张图片,从0开始(应为你最大设置张数为5,所以这里N最大=4,为5不显示)
    Refresh();
    getchar();
}
发表于 2008-7-6 15:24:44 | 显示全部楼层
原帖由 zcfaaagggl 于 2008-7-6 15:03 发表
char pic[5][1600]={
.................
};


void main()
{
    ClearScreen();
    WriteBlock(0,0,160,80,1,pic[5]);
    Refresh();
    getchar();
}

我这么写怎么什么都没显示

char pic[][1600]={
......... ...



不建议你用数组定义多幅图片……
但如果非要用
首先二维数组必须在第二个[]给出大小,即必须pic[可以缺省][有值]
二维数组实际可以用一维代替
例如你可以直接定义char pic[5×每幅图片大小],然后再单独定义个数组char tempic[单幅大小]
然后tempic读取相应的pic[],之后绘制
可以这样tempic=pic+相应的位移量,例如你要第二幅图就加1600即可,这样tempic保存的就是第二幅图首地址

另外你之前显示不出来,是你的pic,i的范围只能0~4,不能是i上限5
还是那句话,对多图内容什么的,建议楼主直接保存为一个文件,然后指针相应指向图片首位置,最后读取即可。只要数学算法让指针指向需要的图片再fread即可
直接用数组定义大量的图片,会莫名其妙的发生错误………
发表于 2008-7-6 17:48:37 | 显示全部楼层
原帖由 星痕 于 2008-7-6 15:24 发表

直接用数组定义大量的图片,会莫名其妙的发生错误………

会吗?没碰到过……
发表于 2008-7-6 18:53:36 | 显示全部楼层
我碰到过的…………
莫名其妙的出错,但是就找不到哪里错………
后来完全放弃把图片弄进编译中的想法……另外用文曲星写时把一大段代码放前面不嫌看得不舒服嘛?
发表于 2008-7-6 19:06:09 | 显示全部楼层
用什么编译环境遇到的??
 楼主| 发表于 2008-7-7 02:07:09 | 显示全部楼层
BUG????
恐怖
发表于 2008-7-7 08:39:59 | 显示全部楼层
用Gameghost的编译器吧..
功能比较强大..
现在还支持了类......
发表于 2008-7-7 11:10:32 | 显示全部楼层
转学c++什么的吧………lava最终只是个跳板
发表于 2008-7-7 17:26:58 | 显示全部楼层
LS的话在理
 楼主| 发表于 2008-7-7 18:07:21 | 显示全部楼层
我想LAVA方便点,如果运行TURBO C的话,看起都费力

用LAVA画起图是多么惬意啊
发表于 2008-7-7 18:38:29 | 显示全部楼层
用BASIC画图更惬意。
发表于 2008-7-7 20:25:19 | 显示全部楼层
writeblock是比较方便,但是C++也可以自己写嘛.
发表于 2008-7-8 20:03:21 | 显示全部楼层
原帖由 星痕 于 2008-7-6 18:53 发表
我碰到过的…………
莫名其妙的出错,但是就找不到哪里错………
后来完全放弃把图片弄进编译中的想法……另外用文曲星写时把一大段代码放前面不嫌看得不舒服嘛? ...

这样做肯定没有问题.这肯定是编译器的问题或是其它原因.
另外,下面的代码
  1. char pic[5][1600];
复制代码
我是觉得本就不太好,一下就永久占据一大块内存(8K啊),直到程序结束.如果是小图标什么的出于方便倒还能接受,这种全屏图片这样做就……放到文件里更合理
 楼主| 发表于 2008-7-12 18:39:20 | 显示全部楼层
char pic[4][n];如果是4张大小不一的图片的话,这个N怎么计算呢?
您需要登录后才可以回帖 登录 | 加入易码

本版积分规则

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

GMT+8, 2024-4-25 07:16 , Processed in 0.015126 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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