在mfc中,我们经常碰到的一个情况是,想在界面上添加一个图片,比方说一个小人,但是我们不想要除了图片中小人外的其它图片,怎么办?
我们需要准备三个素材,第一个背景图片,第二个你想要添加的原始小人图片(除小人外其余地方为黑色),第三个屏蔽图片,该图片将你想要扣出来的图片的区域全部涂成黑色,其余部位为白色。
原始要加载的图片 屏蔽图,需要的为黑,不需要的为白
背景图
那么只要下面两个步骤就可以了:
步骤一: 使用bitblt函数将屏蔽图与背景图做AND运算,贴到目的地DC中
步骤二: 再以要透空的图与背景图做OR运算,贴到目的地DC中
void CMyDlg::OnPaint() { CPaintDC dc(this); CDC *mdc = new CDC; //建立一个暂存DC CBitmap *bitmap1 = new CBitmap; //建立源位图 CBitmap *bitmap2 = new CBitmap; //用于反色的源图 CBitmap *bgbmp = new CBitmap;//背景图片 CRect rect; GetClientRect(&rect); mdc->CreateCompatibleDC(&dc); if(NULL == (bgbmp->m_hObject = (HBITMAP)::LoadImage(NULL,"bg.bmp",IMAGE_BITMAP,rect.right,rect.bottom,LR_LOADFROMFILE))) AfxMessageBox("加载背景图片出错"); if(NULL == (bitmap1->m_hObject = (HBITMAP)::LoadImage(NULL,"2.bmp",IMAGE_BITMAP,rect.right,rect.bottom,LR_LOADFROMFILE))) AfxMessageBox("加载源图图片出错"); if(NULL == (bitmap2->m_hObject = (HBITMAP)::LoadImage(NULL,"3.bmp",IMAGE_BITMAP,rect.right,rect.bottom,LR_LOADFROMFILE))) AfxMessageBox("加载源图反色图片出错"); mdc->SelectObject(bgbmp);//取得背景图 dc.BitBlt(0,0,rect.right,rect.bottom,mdc,0,0,SRCCOPY); mdc->SelectObject(bitmap2); dc.BitBlt(0,0,rect.right/2+70,rect.bottom/2+30,mdc,40,40,SRCAND); mdc->SelectObject(bitmap1); dc.BitBlt(0,0,rect.right/2+70,rect.bottom/2+30,mdc,40,40,SRCPAINT); }
效果图如下:
发表评论
-
截图代码
2015-02-11 19:47 0#include "utility.h" ... -
vc---工程打不开问题解决(转载)
2012-07-07 15:03 2224在vc编程中,经常遇到dsw工程文件无法打开,或者打 ... -
图像编程----如何编写SetTimer的回调函数实现动画效果
2011-09-23 12:53 1425我们一般用到settimer函数的时候,第三个参数一般 ... -
MFC类中常用到的一些动态数组
2011-08-12 22:29 0在MFC中,我们经常会碰到保存元素之类的问题,一般用固定的 ... -
堆排序算法实现
2011-08-11 16:57 9771.堆排序. 平均复杂度,最坏复杂度都是nlogn #inc ... -
网络基础
2011-08-11 16:57 0本帖子将介绍如何使用vc6.0进行网络套接字的编程,包括 ... -
句柄,指针,窗口ID之间的互相转换
2011-08-09 10:54 0VC中窗口ID,句柄,指针三者相互转换函数 ID--H ... -
动态链接库
2011-08-08 22:32 0动态链接库,简称DLL,它不是独立运行的程序,只能由其他程 ... -
多线程编程
2011-08-08 19:59 0多线程相关的编程,有很多说法,有人说应该去除,因为他带了 ... -
在用VC6.0写程序调试时,初学者总是会遇到一些错误,针对如下错误主要是因为MFC类库没有引用所出现的问题。
2011-08-08 16:42 1708在用VC6.0写程序调试时,初学者总是会遇到一些错误,针对如下 ... -
多线程编程
2011-08-08 19:59 856多线程相关的编程,有很多说法,有人说应该去除,因为他带 ... -
图标编程(待续)
2011-08-08 15:00 01.动态更改图标ICON 其实很简单 (1)首先我们加载一 ... -
光标编程
2011-08-08 14:47 01.设置光标 我们一般 ... -
键盘实例
2011-08-08 11:03 01.如何防止对话框按下Enter键自动退出 (1)截取消息B ... -
图像编程
2011-08-06 12:20 0涉及图像编程其实很简单,就是要注意双缓冲问题,双缓冲的问题 ... -
图像编程
2011-08-06 12:09 0涉及图像编程其实很简单,就是要注意双缓冲问题,双缓冲的问题 ... -
图形编程
2011-08-06 10:20 0以前一直有个误会,觉得画图形和画图像是一样的,需要双缓冲, ... -
文件相关的编程
2011-08-04 17:04 0从今天开始,我们来开始涉及一些文件方面的编程,也是对它做一个 ... -
控件的扩展使用方法
2011-08-04 13:28 01.动态创建控件 (1) ... -
控件编程
2011-08-04 10:46 01.具有随机图片背景的Ed ...
相关推荐
在这个过程中,我们可以利用OpenCV库,一个强大的开源计算机视觉库,它支持C++编程语言。OpenCV提供了丰富的功能,包括图像读取、处理和保存,以及支持alpha通道,即透明度通道。 首先,我们需要了解PNG(Portable ...
- 计算拼接后的图像大小,并创建一个空的输出图像。 - 将处理过的图像按照预定的顺序和位置写入到输出图像中,可以使用`copyTo`函数。 - 最后,显示或保存结果图像。 6. **MFC界面集成**:在MFC应用程序中,可以...
例如,`SanYe`可能有一个函数用于快速分配和初始化大图像的内存,另一个函数用于将内存中的图像数据保存为文件。 在`content.txt`文件中,可能包含了实现这个过程的具体易语言代码示例,包括如何调用`SanYe`库中的...
当一个图像具有阿尔法通道时,可以通过调整每个像素的阿尔法值来实现不同程度的透明或半透明效果。 3. **图形编程**:文件列表中的`Form1.frm`和`Form1.frx`可能是使用Visual Basic for Applications (VBA)或者...
同时,这也是一个很好的实践机会,可以帮助你提高C#编程和图像处理的能力。 总的来说,实现图片渐变转场效果需要对颜色理论、图像处理以及C#图形编程有深入的理解。通过这样的实践,不仅可以提升你的编程技能,还能...
5. **拼接图像**:将处理后的图片按顺序拼接起来,可以创建一个空白的背景图片,然后逐个将处理好的图片粘贴上去。 6. **保存结果**:最后,使用PIL或Pillow的`save`方法将拼接后的图像保存为新的文件。 下面是一...
- **合成图片**:将多个图像或元素合并到一个单一图像的过程。 2. **C#与WPF结合** WPF是.NET框架的一个组成部分,提供了丰富的UI设计和图像处理能力。在C#中利用WPF,我们可以方便地进行图像操作,包括添加水印...
这里提到的去白边效果来自于ExDui群的雨落无声,这可能是一个社区贡献的优化方法。 6. **图片杂色处理**:图片杂色是指图像中存在的不自然颜色斑点或噪点,这可能是由于拍摄条件不佳或图像处理过程中的问题导致的。...
2. **图像滤镜**:实现类似微信的图片编辑功能,滤镜是一个必不可少的部分。Android支持多种图像处理技术,如颜色空间转换(RGB到HSV)、调整亮度、对比度、饱和度等。还可以使用第三方库,如`androidx.core....
静态编译后的易语言EXE/DLL之间不能再共享譬如窗口、窗口组件等类似资源,对于已经静态连接到一个EXE/DLL中的支持库,该支持库中的数据或资源将不能再被其它EXE/DLL中所使用的同名支持库访问。这是因为代码被分别...
"易语言源码渐变式透明图层叠加(图片合成).7z" 是一个包含易语言源代码的压缩包,其中的核心技术是图像处理中的渐变式透明图层叠加以及图片合成。 在计算机图形学中,图层叠加是一种常用的技术,用于创建复杂的图像...
以下是一个简单的实现步骤: 1. 创建自定义Label控件: 首先,创建一个新的类并继承自Label类,然后在其中重写OnPaint方法。 ```csharp public class TransparentLabel : Label { protected override void ...
- 要合成图片,首先需要创建一个足够大的Bitmap对象作为合成的目标图像,其大小应能容纳所有要合成的源图像。 - 然后,使用Graphics对象的DrawImage方法将源图像绘制到目标图像上,可以指定绘制的位置和缩放比例。...
实例150 打印一个空学生证 264 实例151 自定义横向或纵向打印 266 实例152 自定义打印页码范围 268 第14章 文件及数据流技术 271 实例153 根据日期动态建立文件 272 实例154 将长文件名转换成短文件名 273 实例155 ...
描述中提到的"后台代码实现图片圆角阴影"可能是指通过编程方式在图片的圆角部分添加阴影效果,以提升视觉体验。虽然具体阴影实现没有在提供的代码中体现,但我们可以根据常规的图像处理方法推测其可能的方法。 标签...
实现这个功能,我们需要监听WM_MOUSEMOVE消息,当鼠标移动时,获取当前坐标并截取该区域的屏幕图像,然后将其缩放显示在一个浮动窗口上。这里需要用到GDI+库来处理图形操作。 三、截图区域调整 截图区域的调整通常...
Image-Tidier 是一个用 Java 实现的工具,专门用于裁剪 .png 和 .gif 图像的透明填充,简化了图像编辑过程。通过使用该工具,用户可以有效地提高图像的视觉效果,使其更适合在各种项目中使用。在进行图像处理时,...
在我们的示例中,我们需要一个Bitmap对象来代表原始图片,并在其上添加水印。 4. **Graphics类**:Graphics类是C#中的绘图对象,它提供了各种方法,如DrawImage、DrawString等,用于在Bitmap或其他图形设备上进行...
使用键盘加速键函数可以拷贝、创建、加载或删除加速键表,* 图标是一个图片,由一个位图图像组成,并和一个掩码组合构成该图片的透明区域。当提到图标时,可以是下列两种情况: 1)单个图标图像。资源类型为RT_ICON...
虽然功能可能不如专业截图软件那样强大,但它足以满足基本需求,并提供了一个学习VB图形用户界面编程和图像处理的实例。对于初学者来说,这是一个很好的动手实践项目,可以帮助他们巩固基础,提高编程技能。