• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            S.l.e!ep.¢%

            像打了激速一樣,以四倍的速度運(yùn)轉(zhuǎn),開(kāi)心的工作
            簡(jiǎn)單、開(kāi)放、平等的公司文化;尊重個(gè)性、自由與個(gè)人價(jià)值;
            posts - 1098, comments - 335, trackbacks - 0, articles - 1
              C++博客 :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

            BLENDFUNCTION

            Posted on 2010-09-07 14:39 S.l.e!ep.¢% 閱讀(917) 評(píng)論(1)  編輯 收藏 引用 所屬分類: DirectUI

            typedef struct _BLENDFUNCTION {
            ? BYTE BlendOp;
            ? BYTE BlendFlags;
            ? BYTE SourceConstantAlpha;
            ? BYTE AlphaFormat;
            } BLENDFUNCTION, *PBLENDFUNCTION, *LPBLENDFUNCTION;


            The BLENDFUNCTION structure controls blending by specifying the blending functions for source and destination bitmaps.
            BLENDFUNCTION這種結(jié)構(gòu)的混合控制通過(guò)指定源和目標(biāo)位圖的混合功能
            BlendOp

            The source blend operation. Currently, the only source and destination blend operation that has been defined is AC_SRC_OVER. For details, see the following Remarks section.

            指定源混合操作。目前,唯一的源和目標(biāo)混合,已定義的AC_SRC_OVER; 即根據(jù)源alpha值把源圖像疊加到目標(biāo)圖像上。OpenGLalpha混合還支持其他的方式,如常量顏色源。

            BlendFlags

            Must be zero.


            SourceConstantAlpha

            Specifies an alpha transparency value to be used on the entire source bitmap. The SourceConstantAlpha value is combined with any per-pixel alpha values in the source bitmap. If you set SourceConstantAlpha to 0, it is assumed that your image is transparent. Set the SourceConstantAlpha value to 255 (opaque) when you only want to use per-pixel alpha values.

            指定一個(gè)alpha透明度值將用于整個(gè)源位圖;該SourceConstantAlpha值與任何在源位圖的每個(gè)像素的alpha值組合;如果設(shè)置為0,就會(huì)假定你的圖片是透明的;如果需要使用每像素alpha值,設(shè)置SourceConstantAlpha值255(不透明);

            AlphaFormat

            This member controls the way the source and destination bitmaps are interpreted. AlphaFormat has the following value.

            Value Meaning
            AC_SRC_ALPHA This flag is set when the bitmap has an Alpha channel (that is, per-pixel alpha). Note that the APIs use premultiplied alpha, which means that the red, green and blue channel values in the bitmap must be premultiplied with the alpha channel value. For example, if the alpha channel value is x, the red, green and blue channels must be multiplied by x and divided by 0xff prior to the call.


              AlphaFormat 此成員控制源和目標(biāo)位圖的解釋;看以下值:
              AC_SRC_ALPHA 這個(gè)標(biāo)志被設(shè)置當(dāng)那位圖有Alpha通道(也就是說(shuō),每個(gè)像素的Alpha);
              例如,如果Alpha通道值是x,紅色,綠色和藍(lán)色通道必須乘以x和由
              0xff分開(kāi)在調(diào)用之前

            Remarks

            When the AlphaFormat member is AC_SRC_ALPHA, the source bitmap must be 32 bpp. If it is not, the AlphaBlend function will fail.

            When the BlendOp member is AC_SRC_OVER, the source bitmap is placed over the destination bitmap based on the alpha values of the source pixels.

            If the source bitmap has no per-pixel alpha value (that is, AC_SRC_ALPHA is not set), the SourceConstantAlpha value determines the blend of the source and destination bitmaps, as shown in the following table. Note that SCA is used for SourceConstantAlpha here. Also, SCA is divided by 255 because it has a value that ranges from 0 to 255.

            Dst.Red= Src.Red * (SCA/255.0)+ Dst.Red * (1.0 - (SCA/255.0))
            Dst.Green= Src.Green * (SCA/255.0)+ Dst.Green * (1.0 - (SCA/255.0))
            Dst.Blue= Src.Blue * (SCA/255.0)+ Dst.Blue * (1.0 - (SCA/255.0))

            ?

            If the destination bitmap has an alpha channel, then the blend is as follows.

            Dst.Alpha= Src.Alpha * (SCA/255.0)+ Dst.Alpha * (1.0 - (SCA/255.0))

            ?

            If the source bitmap does not use SourceConstantAlpha (that is, it equals 0xFF), the per-pixel alpha determines the blend of the source and destination bitmaps, as shown in the following table.

            Dst.Red= Src.Red+ (1 - Src.Alpha) * Dst.Red
            Dst.Green= Src.Green+ (1 - Src.Alpha) * Dst.Green
            Dst.Blue= Src.Blue+ (1 - Src.Alpha) * Dst.Blue

            ?

            If the destination bitmap has an alpha channel, then the blend is as follows.

            Dest.alpha= Src.Alpha+ (1 - SrcAlpha) * Dst.Alpha

            ?

            If the source has both the SourceConstantAlpha (that is, it is not 0xFF) and per-pixel alpha, the source is pre-multiplied by the SourceConstantAlpha and then the blend is based on the per-pixel alpha. The following tables show this. Note that SourceConstantAlpha is divided by 255 because it has a value that ranges from 0 to 255.

            Src.Red= Src.Red* SourceConstantAlpha / 255.0;
            Src.Green= Src.Green* SourceConstantAlpha / 255.0;
            Src.Blue= Src.Blue* SourceConstantAlpha / 255.0;
            Src.Alpha= Src.Alpha* SourceConstantAlpha / 255.0;
            Dst.Red= Src.Red+ (1 - Src.Alpha) * Dst.Red
            Dst.Green= Src.Green+ (1 - Src.Alpha) * Dst.Green
            Dst.Blue= Src.Blue+ (1 - Src.Alpha) * Dst.Blue
            Dst.Alpha= Src.Alpha+ (1 - Src.Alpha) * Dst.Alpha

            ?

            最后一個(gè)字段AlphaFormat有兩個(gè)選擇:0表示常量alpha值,AC_SRC_ALPHA表示每個(gè)像素有各自的alpha通道。

            如果AlphaFormat字段為0,源位圖中的所有像素使用同樣的常量alpha值,即SourceConstantAlpha字段中的值,該值實(shí)際上是0255,而不是01。這里0表示完全透明,255表示完全不透明。目標(biāo)像素以255-SourceConstantAlpha值作為alpha值。

            如果AlphaFormat字段的值是AC_SRC_ALPHA,源設(shè)備表面的每個(gè)像素必須有各自的alpha通道。即,必須是32-bpp的物理設(shè)備上下文,或是選中了32-bpp DDBDIB段的內(nèi)存設(shè)備上下文。這些情況下,每個(gè)源像素有4個(gè)8位通道:紅、綠、藍(lán)和alpha。每個(gè)像素的alpha通道和SourceConstantAlpha字段一起用于把源和目標(biāo)混合起來(lái)。實(shí)際用于計(jì)算的運(yùn)算式如下:

            Tmp.Red ??= Src.Red ??* SourceConstantAlpha / 255;

            Tmp.Green = Src.Green * SourceConstantAlpha / 255;

            Tmp.Blue ?= Src.Blue ?* SourceConstantAlpha / 255;

            Tmp.Alpha = Src.Alpha * SourceConstantAlpha / 255;

            Beta????? = 255 – Tmp.alpha;

            Dst.Red ??= Tmp.Red? ?+ Round((Beta * Dst.Red? )/255);

            Dst.Green = Tmp.Green + Round((Beta * Dst.Green)/255);

            Dst.Blue ?= Tmp.Blue ?+ Round((Beta * Dst.Blue )/255);

            Dst.Alpha = Tmp.Alpha + Round((Beta * Dst.Alpha)/255);


            Feedback

            # re: BLENDFUNCTION   回復(fù)  更多評(píng)論   

            2012-08-09 09:16 by changmning
            有這個(gè)函數(shù)BLENDFUNCTION的用法實(shí)例嗎?
            亚洲中文字幕无码一久久区| 国内精品人妻无码久久久影院导航| 久久天天躁狠狠躁夜夜网站 | 香蕉久久久久久狠狠色| 久久99亚洲综合精品首页| 无码人妻少妇久久中文字幕| 久久水蜜桃亚洲av无码精品麻豆 | 国产成人精品综合久久久| 欧美日韩精品久久久久| 久久久无码精品亚洲日韩按摩| 久久久久中文字幕| 国内精品伊人久久久影院| 久久99国产综合精品女同| 久久久久九国产精品| 中文国产成人精品久久亚洲精品AⅤ无码精品 | 狠狠色综合网站久久久久久久| 色播久久人人爽人人爽人人片aV| 久久亚洲私人国产精品vA| 国内精品久久久久久久亚洲| 午夜不卡久久精品无码免费| 91精品国产综合久久四虎久久无码一级| 亚洲国产精品嫩草影院久久| 久久久久久久人妻无码中文字幕爆 | 麻豆AV一区二区三区久久| 久久强奷乱码老熟女网站| 99精品久久精品| 亚洲国产精品无码久久久不卡 | 亚洲国产精品成人久久蜜臀 | 国产V综合V亚洲欧美久久| 一个色综合久久| 久久精品人妻一区二区三区| 国产精品无码久久综合| 女人高潮久久久叫人喷水| 久久国产视屏| 亚洲欧美日韩精品久久| 久久99国产精品久久99| 久久精品国产第一区二区三区| 久久久久久久女国产乱让韩| 亚洲人AV永久一区二区三区久久 | 99热成人精品免费久久| 久久免费高清视频|