分享

Windows GDI和GDI+编程实例剖析 (6)

 伤心莫哭 2010-11-07
Alpha混合

  Alpha允许将两个物体混合起来显示,在3D气氛和场景渲染等方面有广泛应用。它能"雾化"图像,使得一个图像着色在另一个半透明的图像上,呈现一种朦胧美。我们知道,一个像素可用R,G,B三个维度来表示,我们可以再加上第4个即:Alpha维度(channel),表征透明程度。

void CGdiexampleDlg::OnAlphaBlend()
{
 // TODO: Add your command handler code here
 CClientDC dc(this);
 //创建Graphics对象
 Graphics graphics(dc);
 //创建ColorMatrix
 ColorMatrix ClrMatrix =
 {
  1.0f, 0.0f, 0.0f, 0.0f, 0.0f,
  0.0f, 1.0f, 0.0f, 0.0f, 0.0f,
  0.0f, 0.0f, 1.0f, 0.0f, 0.0f,
  0.0f, 0.0f, 0.0f, 0.5f, 0.0f,
  0.0f, 0.0f, 0.0f, 0.0f, 1.0f
 };
 //将ColorMatrix赋给ImageAttributes
 ImageAttributes ImgAttr;
 ImgAttr.SetColorMatrix(&ClrMatrix, ColorMatrixFlagsDefault,ColorAdjustTypeBitmap);
 //在矩形区域内显示jpg图像
 Image img1(L "d:\\1.jpg");
 Point destPoints1[3] =
 {
  Point(10, 10), Point(220, 10), Point(10, 290)
 };
 graphics.DrawImage(&img1, destPoints1, 3);
 //Alpha混合
 Image img2(L "d:\\2.jpg");
 int width, height;
 width = img2.GetWidth();
 height = img2.GetHeight();
 graphics.DrawImage(&img2, RectF(10, 10, 210, 280), 0, 0, width, height,UnitPixel, &ImgAttr);
 //在平行四边形区域内显示jpg图像
 Point destPoints2[3] =
 {
  Point(230, 10), Point(440, 10), Point(270, 290)
 };
 graphics.DrawImage(&img1, destPoints2, 3);
 //Alpha混合
 graphics.DrawImage(&img2, destPoints2, 3, 0, 0, width, height, UnitPixel,&ImgAttr);
}

  上述程序中将D盘根目录下文件名为"1.jpg"的图像以矩阵和平行四边形两种方式显示,然后将文件名为为"2.jpg"的图像与之进行混合,其效果如图8。


图8 GDI+ Alpha混合

  为了能进行Alpha混合,我们需要使用ImageAttributes类和ColorMatrix矩阵,ImageAttributes可以进行颜色、灰度等调整从而达到控制图像着色方式的目的。ColorMatrix是ImageAttributes类大多数函数的参数,它包含了Alpha、Red、Green、Blue维度的值,以及另一维w,顺序为RGBaw。

  CGdiexampleDlg::OnAlphaBlend()函数中ColorMatrix的实例ClrMatrix中元素(4,4)的值为0.5,表示Alpha度的值为0.5(即半透明)。在ColorMatrix中,元素(5,5)的值恒定为1.0。我们把ClrMatrix的元素(0,0)修改为0.0,即使得图像2.jpg的红色维度全不显示,再看效果,为图9。列位读者,我们以前在豪杰超级解霸中调整R,G,B值从而控制图像输出颜色的时候,调的就是这个东东!图9的效果很像破旧彩色电视机,红色电子枪"嗝"了。刚大学毕业时,俺那个叫穷啊,就买了这么个电视机,还看得很爽,真是往事不堪回首!


图9 GDI+中的ColorMatrix

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多