这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界» 论坛首页» 活动中心» 合作大赛» 按照GDI 操作后,发现的小问题。。。。

共8条 1/1 1 跳转至

按照GDI 操作后,发现的小问题。。。。

菜鸟
2010-09-04 00:54:37 打赏

按照GDI 弟20页的例程操作后,原样输入代码,发现不能运行。

看看其他的文档后,发现:

在一开始声明 VMINT layer_hdl[2]={0};后,
在下面代码中的创建层就没必要写了,因为会发生冲突
static void draw_hello(void)
{/*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>修改后的例程
VMINT screen_width=vm_graphic_get_screen_width();
VMINT screen_height=vm_graphic_get_screen_height();
VMUINT8 *layer_buffer=NULL, *res=NULL;
VMINT size=0, handle=0;

///创建层
//layer_hdl[0]=vm_graphic_create_layer(0,0,screen_width,screen_height,-1);
//layer_hdl[1]=vm_graphic_create_layer(0,0,screen_width,screen_height,TRANS_COLOR);//第二层有穿透色

///获取基层缓冲
layer_buffer=vm_graphic_get_layer_buffer(layer_hdl[0]);
///绘制基层
vm_graphic_set_clip(0,0,screen_width,screen_height);
res=vm_load_resource("bg.gif",&size);
if(res==NULL)
{
//资源加载失败,释放系统资源,退出应用;
vm_exit_app();
return;
}
。。。。。
}

导致
//绘制第二层
vm_graphic_set_clip(0,0,240,320);
vm_graphic_textout(vm_graphic_get_layer_buffer(layer_hdl[1]),0,0,vm_ucs2_string("Hello world!"),vm_wstrlen(vm_ucs2_string("Hello World!")),VM_COLOR_RED);
中的第一个参数vm_graphic_get_layer_buffer(layer_hdl[1])失败。。。。可能是冲突了吧。

如果将创建层哪一步注释掉,就好了。
请高人指导。




关键词: 按照 操作 发现 问题 graphic layer

院士
2010-09-04 22:23:33 打赏
2楼

请耐心等待


菜鸟
2010-09-06 12:30:42 打赏
3楼
哪里来的GDI,我没找到,可以给我一份吗?
thx

菜鸟
2010-09-06 14:04:44 打赏
4楼

static void draw_hello(void)
{
VMINT screen_width = -1;
VMINT screen_height = -1;
VMUINT8 *layer_buffer = NULL, *res = NULL, *res_cvs = NULL;
VMINT res_size = -1, handle= -1;
struct frame_prop* img_prop = NULL;
screen_width = vm_graphic_get_screen_width();
screen_height = vm_graphic_get_screen_height();
///创建层
layer_hdl[0] = vm_graphic_create_layer(0, 0, screen_width, screen_height, -1);
layer_hdl[1] = vm_graphic_create_layer(0, 0, screen_width, screen_height, TRANS_COLOR);//第二层有穿透色

//获取基层缓冲
layer_buffer = vm_graphic_get_layer_buffer(layer_hdl[0]);
vm_graphic_fill_rect(layer_buffer, 0, 0, screen_width, screen_height, VM_COLOR_WHITE, VM_COLOR_BLACK);
//绘制基层
vm_graphic_set_clip(0, 0, screen_width, screen_height);
res=vm_load_resource("bg.gif", &res_size);
if(res==NULL)
{
//资源加载失败,释放系统资源,退出应用;
vm_exit_app();
return;
}
handle = vm_graphic_load_image(res, res_size);
if (0 > handle)
{
vm_free(res);
return;
}
res_cvs = vm_graphic_get_canvas_buffer(handle);
img_prop = vm_graphic_get_img_property(handle, 1);
vm_graphic_blt(layer_buffer, 10, 10, res_cvs, 0, 0, img_prop->width, img_prop->height, 1);

vm_graphic_set_clip(0, 0, screen_width, screen_height);
vm_graphic_clear_layer_bg(layer_hdl[1]);
vm_graphic_textout(vm_graphic_get_layer_buffer(layer_hdl[1]),10,img_prop->height + 10,
vm_ucs2_string("Hello world!"),vm_wstrlen(vm_ucs2_string("Hello World!")),VM_COLOR_RED);

vm_graphic_flush_layer(layer_hdl, 2);
}
我处理的时候好像没问题,呵呵。。


助工
2010-09-06 18:19:45 打赏
5楼
hi, wohuole,

不知道你说的

vm_graphic_textout( vm_graphic_get_layer_buffer(layer_hdl[1]),0,0,vm_ucs2_string("Hello world!"),vm_wstrlen(vm_ucs2_string("Hello World!")),VM_COLOR_RED);
中的第一个参数vm_graphic_get_layer_buffer(layer_hdl[1])失败。。。。

失败到底是怎么失败了,有什么error info吗?

至少声明层,和创建层两个都是必须的
声明的是 层的handle ,而创建层 才是具体的有层,把层和handle对应起来

菜鸟
2010-09-06 23:08:02 打赏
6楼

我是通过
if(vm_graphic_get_layer_buffer(layer_hdl[1])==NULL)
{
vm_graphic_textout(vm_graphic_get_layer_buffer(layer_hdl[0]),70,80,vm_ucs2_string("Helorld!"),vm_wstrlen(vm_ucs2_string("Helorld!")),VM_COLOR_RED);
}
验证的。
因为程序执行到if语句内部了,所以我判断没成功。不知道合理吧?

我再回去读读文档,理解一下你说的,谢谢;


助工
2010-09-09 13:41:31 打赏
7楼

一般可以通过layer handle来判断是否创建成功,在创建layer时,vm_graphic_create_layer()返回值小于0,表示创建layer失败;否则成功。


菜鸟
2010-09-09 16:35:47 打赏
8楼
同问,经常遇到这样古怪问题

共8条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册]