`

图像编程----如何实现一个透空图片

 
阅读更多

   在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);
}

 效果图如下:


                         
 

  • 大小: 888 Bytes
  • 大小: 358 Bytes
  • 大小: 1.3 MB
  • 大小: 253.5 KB
分享到:
评论

相关推荐

    图像空白设成透明转到PNG

    在这个过程中,我们可以利用OpenCV库,一个强大的开源计算机视觉库,它支持C++编程语言。OpenCV提供了丰富的功能,包括图像读取、处理和保存,以及支持alpha通道,即透明度通道。 首先,我们需要了解PNG(Portable ...

    opencv+MFC实现图像拼接

    - 计算拼接后的图像大小,并创建一个空的输出图像。 - 将处理过的图像按照预定的顺序和位置写入到输出图像中,可以使用`copyTo`函数。 - 最后,显示或保存结果图像。 6. **MFC界面集成**:在MFC应用程序中,可以...

    易语言快速创建空白图像8位24位

    例如,`SanYe`可能有一个函数用于快速分配和初始化大图像的内存,另一个函数用于将内存中的图像数据保存为文件。 在`content.txt`文件中,可能包含了实现这个过程的具体易语言代码示例,包括如何调用`SanYe`库中的...

    一个图象特技效果,可以将一个图象以半透明的方式叠加到另外一个图象上(44KB)...

    当一个图像具有阿尔法通道时,可以通过调整每个像素的阿尔法值来实现不同程度的透明或半透明效果。 3. **图形编程**:文件列表中的`Form1.frm`和`Form1.frx`可能是使用Visual Basic for Applications (VBA)或者...

    图片渐变,实现图片渐变(C#源码)

    同时,这也是一个很好的实践机会,可以帮助你提高C#编程和图像处理的能力。 总的来说,实现图片渐变转场效果需要对颜色理论、图像处理以及C#图形编程有深入的理解。通过这样的实践,不仅可以提升你的编程技能,还能...

    基于python实现多张图像无缝拼接源码

    5. **拼接图像**:将处理后的图片按顺序拼接起来,可以创建一个空白的背景图片,然后逐个将处理好的图片粘贴上去。 6. **保存结果**:最后,使用PIL或Pillow的`save`方法将拼接后的图像保存为新的文件。 下面是一...

    C# 图片添加水印(图片或者文字)

    - **合成图片**:将多个图像或元素合并到一个单一图像的过程。 2. **C#与WPF结合** WPF是.NET框架的一个组成部分,提供了丰富的UI设计和图像处理能力。在C#中利用WPF,我们可以方便地进行图像操作,包括添加水印...

    易语言-GDI图像处理例程(包含高斯模糊、图像缩放、图像截取、文字水印、去白边、图片杂色等效果)

    这里提到的去白边效果来自于ExDui群的雨落无声,这可能是一个社区贡献的优化方法。 6. **图片杂色处理**:图片杂色是指图像中存在的不自然颜色斑点或噪点,这可能是由于拍摄条件不佳或图像处理过程中的问题导致的。...

    Android-SimpleimageEditorlike微信图片编辑

    2. **图像滤镜**:实现类似微信的图片编辑功能,滤镜是一个必不可少的部分。Android支持多种图像处理技术,如颜色空间转换(RGB到HSV)、调整亮度、对比度、饱和度等。还可以使用第三方库,如`androidx.core....

    易语言程序免安装版下载

     静态编译后的易语言EXE/DLL之间不能再共享譬如窗口、窗口组件等类似资源,对于已经静态连接到一个EXE/DLL中的支持库,该支持库中的数据或资源将不能再被其它EXE/DLL中所使用的同名支持库访问。这是因为代码被分别...

    易语言源码渐变式透明图层叠加(图片合成).7z

    "易语言源码渐变式透明图层叠加(图片合成).7z" 是一个包含易语言源代码的压缩包,其中的核心技术是图像处理中的渐变式透明图层叠加以及图片合成。 在计算机图形学中,图层叠加是一种常用的技术,用于创建复杂的图像...

    在C#中, Winform的Picture控件上显示透明的Lable字体

    以下是一个简单的实现步骤: 1. 创建自定义Label控件: 首先,创建一个新的类并继承自Label类,然后在其中重写OnPaint方法。 ```csharp public class TransparentLabel : Label { protected override void ...

    C# 图片合成 (图像操作)

    - 要合成图片,首先需要创建一个足够大的Bitmap对象作为合成的目标图像,其大小应能容纳所有要合成的源图像。 - 然后,使用Graphics对象的DrawImage方法将源图像绘制到目标图像上,可以指定绘制的位置和缩放比例。...

    《C#经典编程220例》.(明日科技).【带书签】-共3部分

    实例150 打印一个空学生证 264 实例151 自定义横向或纵向打印 266 实例152 自定义打印页码范围 268 第14章 文件及数据流技术 271 实例153 根据日期动态建立文件 272 实例154 将长文件名转换成短文件名 273 实例155 ...

    图片圆角处理.NET

    描述中提到的"后台代码实现图片圆角阴影"可能是指通过编程方式在图片的圆角部分添加阴影效果,以提升视觉体验。虽然具体阴影实现没有在提供的代码中体现,但我们可以根据常规的图像处理方法推测其可能的方法。 标签...

    MFC实现QQ截图工具

    实现这个功能,我们需要监听WM_MOUSEMOVE消息,当鼠标移动时,获取当前坐标并截取该区域的屏幕图像,然后将其缩放显示在一个浮动窗口上。这里需要用到GDI+库来处理图形操作。 三、截图区域调整 截图区域的调整通常...

    Image-Tidier:裁剪透明 .png 或 .gif 图像以删除不必要的透明填充的简短程序

    Image-Tidier 是一个用 Java 实现的工具,专门用于裁剪 .png 和 .gif 图像的透明填充,简化了图像编辑过程。通过使用该工具,用户可以有效地提高图像的视觉效果,使其更适合在各种项目中使用。在进行图像处理时,...

    C# 为图片添加水印文字

    在我们的示例中,我们需要一个Bitmap对象来代表原始图片,并在其上添加水印。 4. **Graphics类**:Graphics类是C#中的绘图对象,它提供了各种方法,如DrawImage、DrawString等,用于在Bitmap或其他图形设备上进行...

    window32 API大全 win32编程

    使用键盘加速键函数可以拷贝、创建、加载或删除加速键表,* 图标是一个图片,由一个位图图像组成,并和一个掩码组合构成该图片的透明区域。当提到图标时,可以是下列两种情况: 1)单个图标图像。资源类型为RT_ICON...

    vbCaptureIt_visualbasic_

    虽然功能可能不如专业截图软件那样强大,但它足以满足基本需求,并提供了一个学习VB图形用户界面编程和图像处理的实例。对于初学者来说,这是一个很好的动手实践项目,可以帮助他们巩固基础,提高编程技能。

Global site tag (gtag.js) - Google Analytics