GDI+学习之------色彩与图像
色彩
在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往往配对使用,这两个函数调用方法为:
- Status GetPixel( INT x, INT y, Color* color); //获取某点的像素值
- Status SetPixel( INT x, INT y, const Color& color);//设置某点的像素值
实现代码:
- void CGDIDemo_2_1View::onInsertImg(){
- Graphics graphics(this->GetDC()->m_hDC);
- int Alpha;
- Bitmap photoframe(L"img_frame.bmp");
- Bitmap photo(L"img.bmp");
- //得到相框尺寸
- INT iWidth=photoframe.GetWidth();
- INT iHeight=photoframe.GetHeight();
- Color color,colorTemp;
- //依次获取相框的每个相素
- for(int iRow=0;iRow<iHeight;iRow++){
- for(int iColumn=0;iColumn<iWidth;iColumn++){
- photoframe.GetPixel(iColumn,iRow,&color);
- //假设像素为白色。设定其透明度为0
- if(color.GetR()==255&&color.GetG()==255&&color.GetB()==255){
- Alpha=0;
- }else{
- Alpha=255;
- }
- //又一次生成新的像素点
- colorTemp.SetValue(color.MakeARGB(Alpha,color.GetR(),color.GetG(),color.GetB()));
- //又一次设定相素值
- photoframe.SetPixel(iColumn,iRow,colorTemp);
- }
- }
- //进行照片与相框的合成
- //先绘制照片,然后再在照片的上面画相框,由于相框白色部分是透明的,所以会把底层的照片显示出来
- graphics.DrawImage(&photo,0,0,iWidth,iHeight);
- graphics.DrawImage(&photoframe,0,0,iWidth,iHeight);
- }
GDI+学习之------色彩与图像的更多相关文章
- OpenCV计算机视觉学习(3)——图像灰度线性变换与非线性变换(对数变换,伽马变换)
如果需要处理的原图及代码,请移步小编的GitHub地址 传送门:请点击我 如果点击有误:https://github.com/LeBron-Jian/ComputerVisionPractice 下面 ...
- 【opencv学习笔记六】图像的ROI区域选择与复制
图像的数据量还是比较大的,对整张图片进行处理会影响我们的处理效率,因此常常只对图像中我们需要的部分进行处理,也就是感兴趣区域ROI.今天我们来看一下如何设置图像的感兴趣区域ROI.以及对ROI区域图像 ...
- 使用GDI+显示OpenCV中的图像IplImage
OpenCV虽然自带了轻量级的界面库HighGUI,但是支持的图像化元素实在是太少了,一般只在前期算法测试时使用.实际产品还是使用MFC库.因此本文记录了如何在GDI+中显示OpenCV中的IplIm ...
- OpenCV计算机视觉学习(1)——图像基本操作(图像视频读取,ROI区域截取,常用cv函数解释)
1,计算机眼中的图像 我们打开经典的 Lena图片,看看计算机是如何看待图片的: 我们点击图中的一个小格子,发现计算机会将其分为R,G,B三种通道.每个通道分别由一堆0~256之间的数字组成,那Ope ...
- OpenCV计算机视觉学习(13)——图像特征点检测(Harris角点检测,sift算法)
如果需要处理的原图及代码,请移步小编的GitHub地址 传送门:请点击我 如果点击有误:https://github.com/LeBron-Jian/ComputerVisionPractice 前言 ...
- C# GDI+学习笔记1
前言 本文是学习C# GDI+系列的第一篇文章,简单的介绍了GDI+的一些基本绘图内容,比较粗糙.但本文主要是让大家简单的回顾一下GDI+的基本概念.本篇文章的参考代码请在此下载 . GDIPTes ...
- GDI+学习---2.GDI+编程模式及组成类
在使用GDI+的时候,您不必像在GDI中那样关心设备场景句柄,只需简单地创建一个Graphics对象,然后以您熟悉的面向对象的方式(如myGraphicsObject.DrawLine(paramet ...
- OpenCV计算机视觉学习(12)——图像量化处理&图像采样处理(K-Means聚类量化,局部马赛克处理)
如果需要处理的原图及代码,请移步小编的GitHub地址 传送门:请点击我 如果点击有误:https://github.com/LeBron-Jian/ComputerVisionPractice 准备 ...
- 学习 opencv---(3) ROI 区域图像叠加&初级图像混合
在这篇文章里,我们一起学习了在OpenCV中如何定义感兴趣区域ROI,如何使用addWeighted函数进行图像混合操作,以及将ROI和addWeighted函数结合起来使用,对指定区域进行图像混合操 ...
随机推荐
- git——merge和rebase的区别
参考http://www.jianshu.com/p/129e721adc6e 我在公司里看到其他同事都使用git pull --rebase拉取远程代码,而我总是用git pull,也有同事和我说过 ...
- PHP开发之旅-提取表单提交内容发送邮件
在实际项目开发中,我们经常需要得到用户的反馈信息并及时回复.普通的留言板有一定的内容限制,而邮件则能满足这个需求.今天给大家演示一下怎么利用PHP发送电子邮件. 1.创建表单 <form nam ...
- JDBC链接数据库步骤
java中定义链接数据库的标准:JDBC 1.导包:不同数据库有不同的jdbc驱动包,而且jdbc驱动包和数据库版本必须对应 2.测试 3.写代码 try { 1.//加载JDBC驱动 Clas ...
- Hive扩展功能(三)--使用UDF函数将Hive中的数据插入MySQL中
软件环境: linux系统: CentOS6.7 Hadoop版本: 2.6.5 zookeeper版本: 3.4.8 主机配置: 一共m1, m2, m3这五部机, 每部主机的用户名都为centos ...
- Angular——流程控制指令
基本介绍 (1)ng-repeat,类似于for循环,对数组进行遍历 (2)ng-switch on,ng-switch-when,类似于switch,case 基本使用 ng-repeat < ...
- JS——client
clientTop.clientLeft: clientTop:盒子的上boder clientLeft:盒子的左border clientWidth与clientHeight 1.在有DTD情况下: ...
- 怎么选择最适合自己的Python培训机构?
Python培训已经成为入门Python的一个重要途径,它的优势在于学习知识的系统性.快速性和实用性.Python培训毕业的学员大多数拥有较强的实战动手能力,能够较快上手,更符合企业需求. 不过,大部 ...
- recreate dbcontrol on database 11.2.0.1 using emca
[oracle@osb ~]$ env | grep ORA ORACLE_SID=ACE ORACLE_BASE=/oracle ORACLE_TERM=xterm ORACLE_HOME=/ora ...
- Linux之iptables(三、命令--->单主机)
iptables命令规则格式: iptables [-t table] SUBCOMMAND chain [-m matchname[per-match-options]] -j targetname ...
- Django - Form和ModelForm
[TOC] 一. form介绍 1.生成页面可用的HTML标签 2. 提供input可以提交数据 3. 对用户提交的数据进行校验 4. 保留上次输入内容 5. 提供错误信息 二. 普通方式书写注册功能 ...