directfb png透明色问题

本文转载自:http://blog.csdn.net/j6915819/article/details/6068545

directfb是一个做嵌入式的轻型库,对此,我不做太多说明,网上关于基础介绍的内容比较多了!

 

我要讲的是关于directfb插入图片透明色的问题,关于怎么制作成透明色的png,网络上有很多这方面的资料,用ps.....

 

如下图所示:

 

 这是运用常规的方法做的结果。

而我们想要的是以下这种结果:

我们打开directfb,查看API中会发现

DFBResult RenderTo (
 IDirectFBImageProvider *thiz,
 IDirectFBSurface *destination,
 const DFBRectangle *destination_rect
);

下面有这样的说明:

If the image file has an alpha channel it is rendered with alpha channel if the destination surface is of the ARGB pixelformat. Otherwise, transparent areas are blended over a black background.

 

我们通过上面的描述,我们可以清楚的知道,我们的PNG图片是有alpha通道的,而我们的surface没有alpha通道时,图片的背景部分会被染黑。

 

解决方案呢:

DFBSurfaceDescription dsc;
    IDirectFBImageProvider *provider;

    dsc.flags       = DSDESC_PIXELFORMAT| DSDESC_WIDTH | DSDESC_HEIGHT ;
  
  dsc.pixelformat = DSPF_ARGB;  //我们在这个地方设置其像素格式
    dsc.width       = size; 
    dsc.height      = size;

设置完以后:

   DFBCHECK (dfb->CreateImageProvider (dfb,str, &provider));
    DFBCHECK (provider->RenderTo (provider, logo, NULL));
    provider->Release (provider);
    primary->SetBlittingFlags( primary ,DSBLIT_BLEND_ALPHACHANNEL );

   //在这一行我们需要设置blit格式,然后再对surface进行blit操作

  DFBCHECK (primary->Blit (primary, logo, NULL, posX,posY));

 

总结:这个问题主要是我们对alpha通道没有一个直观清晰的认识,具体我们可以参考晚上的一些资料。关于alpha通道,在directfb源码束中有一个df_porter该例子对alpha进行了一个较好的说明:

其中有著名的Porter/Duff 定理,大家可以做仔细研究。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值