色彩

在GDI+中。色彩是通过Color类来描写叙述的。不是用RGB类。用RGB构造会出错。GDI+中的色彩信息值是由一个32位的数据来表示的,它包含8位alpha值和各8位的R、G、B值,对于alpha值是用来表示透明度的,0表示全然透明,255表示不透明。从本质上讲,透明度是像素之间的一种合成运算,它的计算公式是:

输出色彩=前景色*Alpha值/255 + 背景色*(255-Alpha值)/255 

举个样例来说,如果有一个点。其色彩的红色分量值为150。背景色的红色分量值为100,在进行输出时,将透明度设置为200,放样目标区域中最终于显示的色彩将是:

150*200/255 + 100*(255-200)/255 =139

举个样例,图像合成。

先看下终于效果:

+=

原理说明:从上面的图中我们也能够看到,要实现的结果就是将王力宏装到相框中去,大家注意看相框。要装王力宏的部分所有是白色,所以假设能先把相框的白色部分设为全透明(透明度为0),然后王力宏的照片画在底层,然后再在上面盖上相框,由于相框的白色部分已经透明了,所以力宏哥哥会在透明部分被显示出来。而不被上层相框覆盖!

对于怎样相框的白色部分透明,我们能够用这个方案:首先对像框图片的每一像素进行訪问。假设发现该像素是白色的,则设置其透明度为全然透明;否则。设置其透明度为全然不透明。这样就能保证白色部分全然透明。GDI+中对像素的訪问是通过Bitmap对象的GetPixel()函数来实现的,GetPixel与SetPixel往往配对使用,这两个函数调用方法为:

  1. Status GetPixel( INT x, INT y, Color* color);  //获取某点的像素值
  2. Status SetPixel( INT x, INT y, const Color& color);//设置某点的像素值

实现代码:

  1. void CGDIDemo_2_1View::onInsertImg(){
  2. Graphics graphics(this->GetDC()->m_hDC);
  3. int Alpha;
  4. Bitmap photoframe(L"img_frame.bmp");
  5. Bitmap photo(L"img.bmp");
  6. //得到相框尺寸
  7. INT iWidth=photoframe.GetWidth();
  8. INT iHeight=photoframe.GetHeight();
  9. Color color,colorTemp;
  10. //依次获取相框的每个相素
  11. for(int iRow=0;iRow<iHeight;iRow++){
  12. for(int iColumn=0;iColumn<iWidth;iColumn++){
  13. photoframe.GetPixel(iColumn,iRow,&color);
  14. //假设像素为白色。设定其透明度为0
  15. if(color.GetR()==255&&color.GetG()==255&&color.GetB()==255){
  16. Alpha=0;
  17. }else{
  18. Alpha=255;
  19. }
  20. //又一次生成新的像素点
  21. colorTemp.SetValue(color.MakeARGB(Alpha,color.GetR(),color.GetG(),color.GetB()));
  22. //又一次设定相素值
  23. photoframe.SetPixel(iColumn,iRow,colorTemp);
  24. }
  25. }
  26. //进行照片与相框的合成
  27. //先绘制照片,然后再在照片的上面画相框,由于相框白色部分是透明的,所以会把底层的照片显示出来
  28. graphics.DrawImage(&photo,0,0,iWidth,iHeight);
  29. graphics.DrawImage(&photoframe,0,0,iWidth,iHeight);
  30. }

GDI+学习之------色彩与图像的更多相关文章

  1. OpenCV计算机视觉学习(3)——图像灰度线性变换与非线性变换(对数变换,伽马变换)

    如果需要处理的原图及代码,请移步小编的GitHub地址 传送门:请点击我 如果点击有误:https://github.com/LeBron-Jian/ComputerVisionPractice 下面 ...

  2. 【opencv学习笔记六】图像的ROI区域选择与复制

    图像的数据量还是比较大的,对整张图片进行处理会影响我们的处理效率,因此常常只对图像中我们需要的部分进行处理,也就是感兴趣区域ROI.今天我们来看一下如何设置图像的感兴趣区域ROI.以及对ROI区域图像 ...

  3. 使用GDI+显示OpenCV中的图像IplImage

    OpenCV虽然自带了轻量级的界面库HighGUI,但是支持的图像化元素实在是太少了,一般只在前期算法测试时使用.实际产品还是使用MFC库.因此本文记录了如何在GDI+中显示OpenCV中的IplIm ...

  4. OpenCV计算机视觉学习(1)——图像基本操作(图像视频读取,ROI区域截取,常用cv函数解释)

    1,计算机眼中的图像 我们打开经典的 Lena图片,看看计算机是如何看待图片的: 我们点击图中的一个小格子,发现计算机会将其分为R,G,B三种通道.每个通道分别由一堆0~256之间的数字组成,那Ope ...

  5. OpenCV计算机视觉学习(13)——图像特征点检测(Harris角点检测,sift算法)

    如果需要处理的原图及代码,请移步小编的GitHub地址 传送门:请点击我 如果点击有误:https://github.com/LeBron-Jian/ComputerVisionPractice 前言 ...

  6. C# GDI+学习笔记1

    —前言 本文是学习C# GDI+系列的第一篇文章,简单的介绍了GDI+的一些基本绘图内容,比较粗糙.但本文主要是让大家简单的回顾一下GDI+的基本概念.本篇文章的参考代码请在此下载 . GDIPTes ...

  7. GDI+学习---2.GDI+编程模式及组成类

    在使用GDI+的时候,您不必像在GDI中那样关心设备场景句柄,只需简单地创建一个Graphics对象,然后以您熟悉的面向对象的方式(如myGraphicsObject.DrawLine(paramet ...

  8. OpenCV计算机视觉学习(12)——图像量化处理&图像采样处理(K-Means聚类量化,局部马赛克处理)

    如果需要处理的原图及代码,请移步小编的GitHub地址 传送门:请点击我 如果点击有误:https://github.com/LeBron-Jian/ComputerVisionPractice 准备 ...

  9. 学习 opencv---(3) ROI 区域图像叠加&初级图像混合

    在这篇文章里,我们一起学习了在OpenCV中如何定义感兴趣区域ROI,如何使用addWeighted函数进行图像混合操作,以及将ROI和addWeighted函数结合起来使用,对指定区域进行图像混合操 ...

随机推荐

  1. python--9、并发之多进程应用

    multiprocessing模块 想要充分地使用多核CPU的资源(os.cpu_count()查看),在python中大部分情况需要使用多进程.Python提供了multiprocessing.  ...

  2. Android FrameWork 学习之Android 系统源码调试

    这是很久以前访问掘金的时候 无意间看到的一个关于Android的文章,作者更细心,分阶段的将学习步骤记录在自己博客中,我觉得很有用,想作为分享同时也是留下自己知识的一些欠缺收藏起来,今后做项目的时候会 ...

  3. WEB开发模式浅析

    WEB技术随着互联网的崛起而崛起,又随着移动互联网的发展而呈现更加多样化的趋势. 黑暗时代:大约在2005年以前,所谓的WEB开发主要还是美工的活,HTML/CSS占主导,Dreamwaver做为页面 ...

  4. Angular——tab切换案例

    基本介绍 angular框架下的tab切换,相比较于之前的纯js写的代码,有一个很大的特点就是以数据为驱动,基本上不用搜索dom元素就可以实现效果 基本使用 (1)导航部分使用的是的状态使用的是ng- ...

  5. [Windows Server 2012] 手工破解MySQL密码

    ★ 欢迎来到[护卫神·V课堂],网站地址:http://v.huweishen.com★ 护卫神·V课堂 是护卫神旗下专业提供服务器教学视频的网站,每周更新视频.★ 本节我们将带领大家:破解MySQL ...

  6. SQL Server建库-建表-建约束

    ----------------------------------------SQL Server建库-建表-建约束创建School数据库------------------------------ ...

  7. comdlg32.dll

    dll的应用,目前还不知道要怎么查看dll里的功能,暂且试着用了一个, 下面的Declare 分32位office软件和64位,如果是64位,要在Declare 后面加上PtrSafe ,定义的Typ ...

  8. pop的运用

    pop():弹出列表最后一个元素 练习题: num_list = [12, 45, 34,13, 100, 24, 56, 74, 109] one_list = [] two_list = [] t ...

  9. 开发LED屏幕页面遇到的问题

    上上个礼拜公司的展销会活动需要一个展示在LED大屏幕的页面,顶部显示平台交易总金额,左右两边分别是厂家和买家实时交易记录,具体页面长下面这个样子 需求评审的时候产品说顶部的总金额要有一个数字滚动或者翻 ...

  10. 兼容ie6的mvvm框架--san

    最近,由于公司项目需要,使用百度mvvm框架san开发了一个兼容ie6的小项目.san的优势是强大的兼容性,能兼容到ie6.当初我自己好奇,尝试用san做了一个小型项目,这里记录一下.如果你也想尝试一 ...