zoukankan      html  css  js  c++  java
  • [MFC]透明图展示

    (Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu 转载请标明来源)

     

    一般我们可见的图形RGB三元色。对Alpha通道的话。它不一定会显示到窗口中来。

     

    Windows窗口中要展示一张透明图相对还是比較困难的,

    1.      比如像windows查看器那样,使透明像素显示查看器底色(近似白色),但对于半透明的图片显示起来效果不是特别好。

    2.      比如像photoshop那样,使用一张斑点的底图,对于全透明示。显示底图。半透明时和底图颜色混合。

    这两种方法的话,photoshop的方法相对来说,视觉效果相对照较好一点。

     

    要实现类似photoshop这种效果。首先我们须要一张底图:

    1.      底图能够是一张小图。但必须是无缝的:能够扩展成一个无限大的图。像瓷砖一样,能够铺无限大。看起来是一体的。

    2.      底图提供位置颜色查询,输入x/y查询像素点颜色

      

    有了底图之后,我们就能够读取这张透明图:

    1.读取原图片颜色信息

    2.逐个像素读取(blue, green, red, alpha),当alpha不为255(255-不透明)

    a)        读取底图相应x,y位置的颜色colorBk

    b)        使用颜色混合:

    blue = (blue *alpha + colorBk.blue * (255 – alpha))/255;

    green = (green *alpha + colorBk.green * (255 – alpha))/255;

    red = (red *alpha + colorBk.red * (255 – alpha))/255;

    c)        alpha设置为255,不同意颜色被window缺省颜色混合

    alpha = 255;

    1. 把处理后的像素显示到窗口中

     

    这样就能够展示一张和Photoshop类似效果的透明图形了。

     

    注意: 使用CImage读取24/32位图形时,读取的字节序是BGR/BGRA。參考MSDN结构体定tagRGBTRIPLE/ tagRGBQUAD

    (Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu 转载请标明来源)

  • 相关阅读:
    【BZOJ4517】排列计数(排列组合)
    【BZOJ2733】永无乡(线段树,启发式合并)
    【BZOJ1237】配对(贪心,DP)
    【BZOJ1492】货币兑换Cash(CDQ分治)
    CDQ分治模板
    【BZOJ3932】任务查询系统(主席树)
    【BZOJ3295】动态逆序对(BIT套动态加点线段树)
    【BZOJ3626】LCA(树上差分,树链剖分)
    图书管理系统
    树集合,树映射
  • 原文地址:https://www.cnblogs.com/clnchanpin/p/6925920.html
Copyright © 2011-2022 走看看