易码技术论坛

 找回密码
 加入易码
搜索
查看: 567930|回复: 16

4灰度Lvc图形系统建议收集

[复制链接]
发表于 2007-1-3 22:27:05 | 显示全部楼层
建议:
希望会在TC1000上亮相~~

如果是,我就从同学的手里把我的第二个TC1000要回来爽爽~~~
 楼主| 发表于 2007-1-3 22:38:54 | 显示全部楼层
ls所说不是图形系统的建议,无视了

如果没有收集到足够的建议,4灰度Lvc将不会开工
发表于 2007-1-4 12:03:16 | 显示全部楼层
如果只能用Refresh();最好再提供一个可变范围的显示函数,不然每次refresh全屏有效率问题.
而且最好可以把初始化指令增加到程序中,这样可以免除不少读文件的麻烦,也省内存.
 楼主| 发表于 2007-1-4 12:11:40 | 显示全部楼层
Refresh不会占用许多时间。不要每次绘图后都Refresh,绘完一帧再Refresh。
初始化指令?什么意思?看不明白
发表于 2007-1-4 12:27:45 | 显示全部楼层
本来只有4种颜色,再用一种透明色会降低表现力啊
应该用mask
 楼主| 发表于 2007-1-4 12:36:11 | 显示全部楼层
可把0-3级灰度中的一种作为透明色,也可以不做透明copy!!!
多一种选择不是更好吗?
发表于 2007-1-4 13:07:53 | 显示全部楼层
我的意思是:用mask更好
 楼主| 发表于 2007-1-4 13:26:03 | 显示全部楼层
你不懂,gb游戏的sprite就是用4灰度中的3种,0为透明色
发表于 2007-1-4 15:03:27 | 显示全部楼层
哎呀,就是那个LavaX的0x41,全局变量初始化的指令,作为宏一样使用,这样载入图片会更快.

还有啊,透明色是绝对要的!省内存.
 楼主| 发表于 2007-1-4 15:16:46 | 显示全部楼层
注意:是Lvc。
还有,不要讨论底层实现的问题。
多关注图形系统吧
发表于 2007-1-4 17:44:27 | 显示全部楼层
图形系统?
void Point(int x,int y,char type);
char GetPoint(int x,int y);
void Line(int x1,int y1,int x2,int y2,char type);
void Circle(int x,int y,int r,int begin,int end,char type);
void Ellipse(int x1,int y1,int x2,int y2,int begin,int end,char type);
void Block(int x1,int y1,int x2,int y2,char type);
void Rectangle(int x1,int y1,int x2,int y2,char type);

void LoadBmp(int left,int top,int width,int height,char type,char buffer[]);
void BitBlt(int left,int top,int width,int height,char type,char buffer[]);
void XDraw(int left,int top,int width,int height,char type);
void Fade(char color);
void ClearScreen();
void UpdateLCD(int left,int top,int width,int height);
void Refresh();

void TextOut(int x,int y,char text[],char type);
void FormatOut(int x,int y,char type,char format[],...);
void SetTextRange(int x1,int y1,int x2,int y2,char type);

char SetFgColor(char color);
char SetBgColor(char color);
char SetTransColor(char color);
char SetGraphMode(char color);
///////////////////////////////////////////////////////////////////////

解释一下:

画圆和画椭圆函数特别增加了画圆弧,如果觉得困难就不要改了。

type的取值如下:
0 1 2bit为DrawMode,取值如下:
#define DRAW_COPY      1//复制
#define DRAW_NOT   2   //反色
#define DRAW_OR   3   //或
#define DRAW_AND   4   //与
#define DRAW_XOR   5   //异或
#define DRAW_TRANS   6   //特别解释一下,使用这个参数时SetTransColor的颜色作为透明色
#define DRAW_FILL   0x20   //是否填充

FormatOut和printf差不多,只不过是将文字绘在缓冲区。
FormatOut和TextOut取值见上。

SetTextRange函数用来设置TextOut和FormatOut的绘图范围,比如在文本框中可以达到只绘半个字的效果
该函数的type6bit为状态位。
#define DRAW_SIMP   0
#define DRAW_MUTI   0x40
当设置成DRAW_SIMP时,如果字超过右边界(或起始坐标不在左边界而在左边界左边或超过下边界)时,字的多余部分会被截去,形成半个字的效果
当设置成DRAW_MUTI时,起始坐标不在左边界而在左边界左边以及超过下边界和DRAW_SIMP一样,但是当文学超过右边界时,文字会换行显示。
初始时显示区域为不换行,160*80大小。

7bit为IO,仅LoadBmp,BitBlt,UpdateLCD可以使用,取值如下:
#define DRAW_IN      0   //以上函数是将图片从变量区经处理复制到缓冲区
#define DRAW_OUT      0x80   //以上函数是将图片从缓冲区经处理复制到变量区
这样就将WriteBlock和GetBlock,LoadBmp和SaveBmp,UpdateLCD和CopyLCD合而为一,方便写程序。

除了UpdateLCD是将屏幕部分刷新(type第七位为1时是把屏幕部分反存到缓冲区中),Refresh刷新屏幕,其他函数无法操作屏幕显存。

XDraw也加强了,现在XDraw的type取值如下:
#define DRAW_MUP      1   //图形上移
#define DRAW_MDOWN   2   //图形下移
#define DRAW_MLEFT      3   //图形左移
#define DRAW_MRIGHT   4   //图形右移
#define DRAW_TX      5   //图形绕X轴反转
#define DRAW_TY      6   //图形绕Y轴反转
#define DRAW_LIGHT      7   //图形色彩渐淡
#define DRAW_DARK      8   //图形色彩加深
这些都是对规定的区域做的操作。

特别提一下,这些预处理(包括时间处理的结构体)最好直接由编译器默认或包含在系统函数头文件里,不需要用户自己输入。
 楼主| 发表于 2007-1-7 15:40:49 | 显示全部楼层
目前已确认的图形api

int SetFgColor(int);
int SetBgColor(int);
int SetKeyColor(int);

void ClearScreen(void);
void Point(int, int, int);
int GetPoint(int, int);
void Line(int, int, int, int, int);
void Block(int, int, int, int, int);
void Rectangle(int, int, int, int, int);
void Circle(int, int, int, int, int);
void Ellipse(int, int, int, int, int, int);
void LoadBitmap(int *,short *);
void WriteBlock(int, int, int, int, int, const short *);
void GetBlock(int, int, int, int, int, short *);
void UpdateScreen(void);
void XDraw(int);

void TextOut(int, int, const char *, int);
发表于 2007-1-9 16:56:58 | 显示全部楼层
引用第2楼leesoft2007-01-03 22:38发表的“”:
ls所说不是图形系统的建议,无视了

如果没有收集到足够的建议,4灰度Lvc将不会开工

大家快加油,不然4灰lava就不开工咯~~~

听说以前的lava程序在这个新平台上不能运行,那么移植的话需要多大的代价呢?
发表于 2007-1-14 13:45:46 | 显示全部楼层
新的系统可以改变原来的系统界面吗?我可以画一些

 楼主| 发表于 2007-1-14 13:54:33 | 显示全部楼层
仅仅是做Lvc虚拟机,而不是让Lvc虚拟机来担任操作系统的角色
发表于 2007-2-28 05:58:05 | 显示全部楼层
好玩等则了!
 楼主| 发表于 2007-1-3 18:39:56 | 显示全部楼层 |阅读模式
  4灰度Lvc
双缓冲
杜绝闪烁问题,所有绘图函数只能在后台绘图。在后台绘图后,若想显示到屏幕,必须调Refresh刷新
原WriteBlock改名BitBlt,其功能基本不变。增加copy图块时透明色设置(可把0-3级灰度中的一种作为透明色)
增加LoadBmp函数,把内存中的bmp转换为适合BitBlt使用的数据

有什么建议欢迎提供
您需要登录后才可以回帖 登录 | 加入易码

本版积分规则

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

GMT+8, 2024-3-29 23:28 , Processed in 0.012700 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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