这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 活动中心 » 合作大赛 » 请问:第二种创建画布的方式(自己创建)的有关问题!

共6条 1/1 1 跳转至

请问:第二种创建画布的方式(自己创建)的有关问题!

菜鸟
2010-09-04 00:42:19     打赏

不好意思,新手,问题可能痴呆了点。。。。见谅啊。。。。。

在VRE GDI introduction中的第22页,介绍第二种创建画布的方式的相关代码。为什么我按照上面写了,运行处错误。。。。(脸红了。。。)。

我是这样写的:

static void draw_hello(void)
{
 VMINT hcanvas1, hcanvas2;
 VMUINT8* cvs_buf1, cvs_buf2;
 struct frame_prop* img_prop=NULL;
 VMUINT8  *layer_buffer=NULL, *res=NULL;
 VMINT  size=0,  handle=0;

 res=vm_load_resource("bg.gif",&size);
 /*创建画布*/
 hcanvas1=vm_graphic_load_image(res,size);
 hcanvas2=vm_graphic_create_canvas(240,320);

 /*获取画布属性*///获取图像属性结构体指针;
 img_prop=vm_graphic_get_img_property(hcanvas1,1);

 /*获取画布显示缓冲区指针*/
 cvs_buf1=vm_graphic_get_canvas_buffer(hcanvas1);
 cvs_buf2=vm_graphic_get_canvas_buffer(hcanvas2);

 /*从一个画布获取数据往另一个画布绘制*/
 vm_graphic_blt(cvs_buf2,0,0,cvs_buf1,0,0,img_prop->width ,img_prop->height ,1);

 /*从画布获取数据往层上绘制*/
 vm_graphic_blt(layer_buffer,0,0,cvs_buf1,0,0,img_prop->width ,img_prop->height ,1);
 vm_graphic_blt(layer_buffer,100,100,cvs_buf2,0,0,img_prop->width ,img_prop->height ,1);
 vm_graphic_flush_layer(layer_hdl,1);//刷屏
 vm_graphic_release_canvas(hcanvas1);//(新加的,我觉得需要释放一下。。。)
 vm_graphic_release_canvas(hcanvas2);
}

各位大侠,救救小弟弟吧。。。。




关键词: 请问     二种     创建     画布     方式     自己     有关问题     gr    

菜鸟
2010-09-04 21:53:59     打赏
2楼
hcanvas1=vm_graphic_load_image(res,size);
改成hcanvas1=vm_graphic_load_image(&res,size);

院士
2010-09-04 22:20:08     打赏
3楼
tks

菜鸟
2010-09-05 10:13:05     打赏
4楼

 自己解答一下:

//自己创建层
 VMINT screen_width=vm_graphic_get_screen_width();
 VMINT screen_height=vm_graphic_get_screen_height();
 VMINT hcanvas1, hcanvas2;
 VMUINT8* cvs_buf1, *cvs_buf2;
 struct frame_prop* img_prop=NULL;
 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_buffer=vm_graphic_get_layer_buffer(layer_hdl[0]);
 //加载图片资源
 if((res=vm_load_resource("bg.gif",&size))==NULL)
 {
  vm_log_error("load resource failed!");
  return;
 }
 //通过加载图片创建画布//
 if((hcanvas1=vm_graphic_load_image(res,size))<0)
 {
  vm_log_error("load image failed!");
  return;
 }
 //释放图片资源
 vm_free(res);
 //自定义创建画布的大小
 if((hcanvas2=vm_graphic_create_canvas(240,320))<0)
 {
  vm_log_error("create canvas failed!");
  return; 
 }
 //获取画布属性////获取图像属性结构体指针;
 img_prop=vm_graphic_get_img_property(hcanvas1,1);

 //获取画布显示缓冲区指针//
 cvs_buf1=vm_graphic_get_canvas_buffer(hcanvas1);
 cvs_buf2=vm_graphic_get_canvas_buffer(hcanvas2);

 //从一个画布获取数据往另一个画布绘制//
 vm_graphic_blt(cvs_buf2,0,0,cvs_buf1,0,0,img_prop->width ,img_prop->height ,1);
 
 //从画布获取数据往层上绘制//
 vm_graphic_blt(layer_buffer,0,0,cvs_buf1,0,0,img_prop->width ,img_prop->height ,1);
 vm_graphic_blt(layer_buffer,0,0,cvs_buf2,0,0,img_prop->width ,img_prop->height ,1);
 vm_graphic_flush_layer(layer_hdl,1);
 vm_graphic_release_canvas(hcanvas1);//(新加的,我觉得需要释放一下。。。)
 vm_graphic_release_canvas(hcanvas2);

这样是可以的。。。。。


助工
2010-09-06 18:54:16     打赏
5楼
hi, wohuole
   
     很高兴看到你自己可以把程序改好 :),不过我这里提醒一下
你create layer0了, 当做vm_graphic_flush_layer(layer_hdl,1);意味着你已经把layer上面的数据刷新到LCD上面了,layer0也要记得释放才行,不然会出错~

菜鸟
2010-09-06 23:00:24     打赏
6楼
谢谢了,我回继续努力的。

共6条 1/1 1 跳转至

回复

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