Symbian 图片透明效果

预备知识:
1。会使用gc中提供的一些画图函数,如果BitBltmask等这些函数
2。双缓冲。因为我们需要在这个过程中创建一张位图的缓冲,同时需要通过CBitmapContext在上面画些东西来
制作一个 mask图。想平时我们使用BitBltmask函数一样通过原图和我们生成的遮罩来绘图,从而制作透明效果。


基本思路:
 1.不管使用carbide还是vs,用自己的方式加载两张图片(方便测试用),并最终转化为CFbsBitmap的形式。
 我们这里假设有两张图片
 CFbsBitmap UpImage;
 CFbsBitmap DownImage;
 2.如果我们想做的效果是UpImage做成透明的,在将UpImage和DownImage叠加(UpImage在上,DownImage在下)
 的时候能隐约看到DownImage。
 3.我们现在如同上面所说(预备知识中)的做一张mask图片,这个图片和我们平时使用的黑白的图片又说不同,
 这个是用的Gray(灰度)。制作的代码如下:
 
  a.在类中contaienr中定义这些成员,当然上面两张图也在其中
  CFbsBitmapDevice *iBitmapDevice;
  CBitmapContext* iBitmapGc;
  TInt iGray;
  CWsScreenDevice* iScreenDev;
  CFbsBitmap *UpImage;
  CFbsBitmap *DownImage;
  CFbsBitmap *ImageMask;   //这个就是我们即将要制作的mask图片
 
  b.创建iBitmapGc和iBitmapDevice以及一张位图ImageMask
  void C**Container::CreatMaskImage()
  {
  if(ImageMask)
   {
   delete ImageMask;
   ImageMask = NULL;
   }
  ImageMask = new ( ELeave ) CFbsBitmap();
  /*
  这里的iScreenDev->SizeInPixels()是一个大小TSize的参数,可以根据自己的需求更改,在我的需求中是做的
  获取屏幕的大小,那我们这里为例我们就应该将这个参数设置为UpImage->SizeInPixels()
  */
  ImageMask->Create( iScreenDev->SizeInPixels(), EGray256 );
  iBitmapDevice =CFbsBitmapDevice::NewL( ImageMask);
 
  iBitmapDevice->CreateBitmapContext( iBitmapGc );
 
 }
 
 上面这个函数如果会双缓冲的应该都能明白,如果不会使用,那就在google或者nokia wiki上搜索下相关知识
 
  c.通过iBitmapGc制作ImageMask位图
  void C**Container::DrawMaskImage()
  {
  /*
  这里第二个参数是需要一个size,我这里是获取的屏幕的大小因为我的应用中是处理截屏图片的透明效果
  所以这么写。如果是一张图片的,比如我们这里是UpImage的,这个的size可以设置为UpImage->SizeInPixels()
  */
  iBitmapGc->Clear(TRect(TPoint(0,0), iScreenDev->SizeInPixels()));   
  iBitmapGc->SetPenStyle( CGraphicsContext::ENullPen );
  iBitmapGc->SetBrushStyle( CGraphicsContext::ESolidBrush );
  /*
  这个参数就是一个透明度了的设置了,参数大小是0~255。这里不好说是0是透明还是255是透明,因为这个需要
  根据你使用的BitBltmask这个函数的最后一个参数定(具体意思看sdk)。如果是设置为ETrue那么0是完全透明
  255是完全不透明,反正如果设置为EFalse,那么255是完全透明。这里可以再程序中动态的改变其透明度来达到
  透明效果动态变化的效果。
  */
  iBitmapGc->SetBrushColor( TRgb::Gray256(iGray) );
  /*
  这里的iImageRect这个参数很明显了,就是说画都多大一个遮罩,如果是做UpImage的遮罩,那么就直接写写成
  TRect(TPoint(0,0),UpImage->SizeInPixels());即可
  */
  iBitmapGc->DrawRect( iImageRect);
  }
 
  d.实现透明效果
  和普通的使用遮罩一样使用我们生成的mask图片,代码如下:
  gc.BitBltMasked(TPoint(0,0),UpImage,UpImage->SizeInPixels(),ImageMask,ETrue);
 
  上面的ETrue这个参数就是我在第C不中提到的。
  这就就是画出一张透明的图片,透明的根据我们的成员iGray这个参数而定。
 
  为了测试我们的透明效果 我们应该在这张透明图片的下面画一张图片,如果我们能看到下面的图片,那就恭喜了,
  全部过程OK了。
 
  你可以在container的Draw函数中这两句话。(就上面这句改为下面两句)
  gc.BitBlt(TPoint(0,0),DownImage,DownImage->SizeInPixels());
  gc.BitBltMasked(TPoint(0,0),UpImage,UpImage->SizeInPixels(),ImageMask,ETrue);
 
 
  总结,这些都是一些基本的思路,如果有自己的需求可以再这个的基础上在添加一些东西,比如我需要制作一张
  透明的CFbsBitmap的图片,而不是画在gc上的,这个我们就需要通过像制作mask图片的方法那样,在建立一个缓冲
  将这个透明效果画在这个缓冲上,那么我们就生成了一个CFbsBitmap的透明图片。方法多多,思路也多多,自己慢慢
  研究,会发现很多有意思的东西。

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/pointerfree/archive/2010/05/17/5599599.aspx

已标记关键词 清除标记
课程简介: 历经半个多月的时间,Debug亲自撸的 “企业员工角色权限管理平台” 终于完成了。正如字面意思,本课程讲解的是一个真正意义上的、企业级的项目实战,主要介绍了企业级应用系统中后端应用权限的管理,其中主要涵盖了六大核心业务模块、十几张数据库表。 其中的核心业务模块主要包括用户模块、部门模块、岗位模块、角色模块、菜单模块和系统日志模块;与此同时,Debug还亲自撸了额外的附属模块,包括字典管理模块、商品分类模块以及考勤管理模块等等,主要是为了更好地巩固相应的技术栈以及企业应用系统业务模块的开发流程! 核心技术栈列表: 值得介绍的是,本课程在技术栈层面涵盖了前端和后端的大部分常用技术,包括Spring Boot、Spring MVC、Mybatis、Mybatis-Plus、Shiro(身份认证与资源授权跟会话等等)、Spring AOP、防止XSS攻击、防止SQL注入攻击、过滤器Filter、验证码Kaptcha、热部署插件Devtools、POI、Vue、LayUI、ElementUI、JQuery、HTML、Bootstrap、Freemarker、一键打包部署运行工具Wagon等等,如下图所示: 课程内容与收益: 总的来说,本课程是一门具有很强实践性质的“项目实战”课程,即“企业应用员工角色权限管理平台”,主要介绍了当前企业级应用系统中员工、部门、岗位、角色、权限、菜单以及其他实体模块的管理;其中,还重点讲解了如何基于Shiro的资源授权实现员工-角色-操作权限、员工-角色-数据权限的管理;在课程的最后,还介绍了如何实现一键打包上传部署运行项目等等。如下图所示为本权限管理平台的数据库设计图: 以下为项目整体的运行效果截图: 值得一提的是,在本课程中,Debug也向各位小伙伴介绍了如何在企业级应用系统业务模块的开发中,前端到后端再到数据库,最后再到服务器的上线部署运行等流程,如下图所示:
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页