directshow中使用StretchDIBits和AlphaBlend实现ARGB32图片的无损缩放

StretchDIBits函数显示RGB数据流图像 testStretchDIBits用于从txt文件读取RGB值并保存在byte数组中,使用StretchDIBits函数在view视图中显示出来 立即下载

之前使用StretchDIBits遇到一个很棘手的问题,就是不能处理alpha通道,都会默认填充零,那么这种情况下,都是透明也就不能正常显示特效了。后来查资料,发现了AlphaBlend可以添加透明度,如果源与目的size不同,则会缩放源,将alpha通道写入。

直接上核心实现代码:

BITMAPINFOHEADER bih;
	memset( &bih, 0, sizeof( bih ) );
	bih.biSize = sizeof( bih );
	bih.biWidth = nSrcWidth;
	bih.biHeight = nSrcHeight;
	bih.biPlanes = 1;
	bih.biBitCount = 32;
	SetStretchBltMode(hMemDC, COLORONCOLOR);
	StretchDIBits( 
		hMemDC, 0,0, 
		nDesWidth, nDesHeight, 
		0, 0, nSrcWidth, nSrcHeight, 
		pSrcData, 
		(BITMAPINFO*) &bih, 
		NULL, 
		SRCCOPY );
	BLENDFUNCTION blend;
	memset( &blend, 0, sizeof( blend) );
	blend.BlendOp= AC_SRC_ALPHA;
	AlphaBlend(hMemDC,0,0,nDesWidth,nDesHeight,hDC,0,0,nSrcWidth,nSrcHeight,blend);

重要参数说明:hMemDC与指定的设备环境相关的设备兼容的DC;hDC:源DC。

ps:谢谢楼下评论,如果是DC直接加载带透明度的图片,那么只需要执行alphablend操作即可,一步到位,压缩和透明度渲染都没问题。但是如果传递的参数是BYTE数组,只能执行两次MemDc的cpy工作了,如果有更好的方法,欢迎指出。

VB窗口透明代码只是将整个窗体透明化 VB窗口透明代码只是将整个窗体透明化VB窗口透明代码只是将整个窗体透明化 立即下载

相关推荐

光伏逆变器在环测试解决方案

光伏行业是利用太阳能光辐射将其转化为可用电能的行业。近年来,为应对气候变化和能源安全等挑战,全球对清洁能源的需求不断增长。太阳能作为最具潜力和可再生的能源之一,被视为替代传统化石能源的重要选择,光伏行业因此得到了迅猛发展,并在全球范围内得到了广泛应用。许多国家和地区都将光伏技术作为关键的能源发展方向。尤其是在新兴和发展中国家,光伏发电具有巨大的增长潜力,将成为未来市场竞争的重点。随着规模化生产的推进,光伏组件的制造成本不断降低。

shiwei0813的博客 960

StretchBlt, StretchDIBits函数显示失真问题

StretchBlt, StretchDIBits可以对图像数据进行拉伸, 压缩显示, 但会失真, 解决方法 调用StretchBlt/StretchDIBits之前调用下面那一句 SetStretchBltMode(pDC->m_hDC,STRETCH_HALFTONE);

cay22的专栏 4888

Coze智能体网页集成实战:从零搭建免登录AI助手

本文详细介绍了如何利用Coze Chat SDK从零开始为网站集成免登录AI助手。通过获取访问令牌和智能体ID,仅需几行JavaScript代码即可将功能完整的对话窗口嵌入网页,实现开箱即用的智能交互。文章重点讲解了核心部署步骤、会话隔离方案以及UI深度定制方法,帮助开发者快速打造贴合品牌、提升用户体验的网页AI助手。

gold8的专栏 558

关于GDI+的绘制小结:图片的拉伸、平铺、透明的GDI+实现

最近做了2个项目,使用GDI+做界面的贴图绘制,遇到了一些问题,网络上也少有答案,现整理一下希望大家以后少走弯路 主要有3个功能函数:1.图片的拉伸点平铺,做过UI的朋友应该能理解这句话,简单说就是把一个很小的原图,不变形,指定在固定点1像素横纵拉伸,平铺成一张大图2.CDC的StretchBlt方法,如何在GDI+中实现3.透明色贴图 先把题目列出来,省的下次想写的时

只谈技术 3636

MFC 修改CheckBox的文本颜色方法

设置主题 这一步是必须的,不可省略。 BOOL CMFCApplication1Dlg::OnInitDialog() { CDialogEx::OnInitDialog(); // 设置此对话框的图标。 当应用程序主窗口不是对话框时,框架将自动 // 执行此操作 SetIcon(m_hIcon, TRUE); // 设置大图标 SetIcon(m_hIcon, FALSE); // 设置小图标 // TODO: 在此添加额外的初始化代码 // 设置主题 HWND

Kim的博客 2249

深度强化学习算法PPO训练Pendulum

returnadv = 0print('状态空间维度:', state_n)print('动作空间维度:', action_n)steps = []if done:breakif done:breakelse:steps = []if done:break。

weixin_43336108的博客 808

AlphaBlend StretchBlt BitBlt

http://www.cnblogs.com/lisen/archive/2010/01/13/1646517.html AlphaBlend    该函数显示拥有透明或半透明像素的位图。  Syntax BOOL AlphaBlend(    HDC   hdcDest,    int     nXOriginDest,  int   nYOriginDest,  int   nWid...

weixin_34307464的博客 249

关于深度可分离卷积

关于深度学习中的深度可分离卷积

qq_45670407的博客 1796

WinAPI: AlphaBlend - 图像透明度

AlphaBlend( DC: HDC; {目标设备环境句柄} p2, p3, p4, p5: Integer; {目标位置与宽高} DC6: HDC; {源设备环境句柄} p7, p8, p9, p10: Integer; {源位置与宽高} p11: TBlendFunction {...

weixin_30596023的博客 169

Vue3 - Element Plus上传组件el-upload上传多个文件时,让on-change监听事件仅执行一次并获取最终文件列表方法(开启多选文件并手动上传,拿到文件列表统一循环调用接口上传)

vue3,elementplus,Upload上传,el-upload,文件上传组件,上传组件on-change里执行多次,取消自动上传后change重复执行问题,upload上传多个文件后导致on-change执行多次拿不到最终文件列表,Element-plus的upload组件on-change不断执行怎么办,上传多个文件多次执行调用,上传多个文件时如何只执行一次on-change方法拿到最终的文件列表,vue3elementplus上传组件开启多个上传后导致change方法执行好几次,仅调用一

🏆 前端领域优质创作者 1万+

【CANoe示例分析】SOMEIPWithvCDL_16

本示例来源于官方提供的示例工程:0004_基于vCDL实现SOMEIP通信_Demo\0004_基于vCDL实现SOMEIP通信_Demo\SOMEIPWithvCDL。

jasonj333 568

Alpha融合和图片透明度[AlphaBlend]

Alpha融合,不论是在3D还是2D中都常见,最常见的应用就是:设置图片的透明度,不透明度,可以实现抠图。 其实现思想如下:有个混合因子,主要是颜色混合:浮点表示:0.0f 整数表示: 0x00 分开计算R,G,B混合/* * alpha为混合因子 0.0 <= alpha <= 1.0 * alpha为混合因子 0x00 <= alpha <= 0xf

dizuo的专栏 1万+

GibbsCAM软件二次开发:GibbsCAM软件API接口详解

API(Application Programming Interface,应用程序编程接口)是一种允许不同软件之间进行通信的接口。在GibbsCAM软件中,API提供了与外部程序交互的能力,使得开发者可以利用GibbsCAM的强大功能进行二次开发,定制化满足特定的制造需求。GibbsCAM的API主要基于.NET框架,使用C#或VB.NET等语言进行编程。在GibbsCAM软件中,通过API接口创建自定义几何形状是实现复杂零件设计和加工策略定制的关键步骤。

kkchenjj的博客 1497

[原创] 关于 AlphaBlend 函数

最近工作中写个工具软件要支持带Alpha通道的PNG图,使用libpng成功读取出了PNG的数据,但是用AlphaBlend进行显示的时候却遇到了问题。 在网上搜索了一下,好像很多前辈使用这个函数都不成功,最后得出的一致结论是AlphaBlend除了SourceConstantAlpha不等于255时可用以外,对带Alpha通道的图是显示不了的,需要自己写Alpha混合算法。因为是搞嵌入式开发,

Cool073的专栏 1832

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

绘制透明位图

=============================================================标题:绘制透明位图摘要:通过AlphaBlend函数实现备注:Windows CE + VS2005日期:2010.4.26姓名:朱铭雷===========================================================

朱铭雷的日记本 1341

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

VC图片的半透明处理

半透明原理:   假设LCD是256色的。颜色格式为332(RGB)   显存中的每一个字节的数据对应一个象素点。   在数据写入显存之前,读取相应相素点值,然后与新的数据按一定的规则混合之后,再写入相应像素点的显存。   这样主要问题关键是混合算法。   混合算法目前在游戏上常用到的算法是AlphaBlend。计算公式如下   假设一幅图象是A,另一幅透明的图象是B,那么透过B去看A,看上去的图

soulforcemw的专栏 1658

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

入门图形学:透明原理

因为我们后面要大量使用透明效果(或者说透明效果是实现我们需要的着色特效的基础部分),所以这里就来非常通俗详细说一下透明的原理。 先来从最简单易懂的二维层面来讲解。 我猜大家使用最常见的透明效果就是在ui中使用.png(带有透明通道)的sprite吧,我们在ps中通过背景透明的模板文件制作保存的.png图片就是这个了,.png的图片在rgb三通道分量之外还附带一个a...

羊羊的博客 8993

WIN32 stretchBlt与StretchDIBlts图像失真问题解决

这边是贴图代码,我创建的了一个与当前窗口DC的(hdc_C),通过 SelectObject() 将位图句柄选入内存兼容,然后使用 StretchBlt() 从内存兼容DC中拷贝图像到当前窗口使用的DC中,注意现在是默认拉伸模式。但是不用担心,前辈们已经解决了这个问题 SetStretchBltMode() 在指定的设备上下文(HDC)中设置位图拉伸模式。() 的第一参数,是你要贴在哪个的HDC上,不理解就与 StretchBlt() 的目标HDC一致就好(也就是第一参数)。这就是当前运行的答案。

qq_59398646的博客 844

StretchDIBits函数显示图片

注:转载请注明出处。 函数原型 int StretchDIBits(HDC hdc,int XDest,int YDest,int nDestWidth,int nDestHeight,int XSrc,int Ysrc,int nSrcWidth,int nSrcHeight,CONST VOID * lpBits,CONST BITMAPINFO * lpBitsInfo,UINT iUs...

hanxiaoyong_的博客 1万+

使用StretchBlt函数进行图像缩放

http://www.oschina.net/code/snippet_222150_16279

小龙王2010 3917

大恒相机显示bmp图像倒立

以上为应该正常显示的,但是经过大恒相机拍摄,却显示如下这是因为大恒官网的事例程序中,使用StretchDIBits绘图的,在这里将BITMAPINFO里面的高设置为负。在GXBitmap.cpp中...

weixin_40113118的博客 1345

基于哈弗曼编码的一种ARGB数据无损压缩/解压缩单元(方法)的C语言实现

实现一种ARGB数据(二进制数据)的无损压缩/解压单元,用于GPU或其它存储器图形图像访问密集的系统中,利用无损数据压缩技术降低存储器带宽,提高访问效率。结果评价:输入压缩后数据执行解压后得到的结果与原始图像完全一致;统计压缩后数据大小与原始图像数据大小比例得到压缩率;能正确完成原图像指定大小块的压缩和解压。---------相关资源见个人主页---------研究一种高效的ARGB数据压缩/解压算法;

weixin_44420519的博客 290

图像处理之-位图(未完待續)

图像处理之-位图 MD DoCumEnT: 3/16/2016 5:59:48 PM by Jimbowhy 自从发现MarkdownPad以后,就沉迷于写作,从未有过这样的浸淫,完全没有了生物钟的同期,基本上只要醒着,手眼就离不了屏幕,离不了键盘,一直敲着几近光滑的按键,那种感觉就是满足,如果要用个词来形容,我觉得 F**KING WRITING! F**KING MY LIFE! 是恰当的。生

4474

数字图像处理

复习课

qq_45762362的博客 1687

【数据压缩】RGB文件三通道分量的熵计算

一、题目设置及准备工作 test.rgb文件分辨率为256256,数据格式为每个像素占用3字节,BGRBGR…保存。拿到文件可以先计算一下文件大小是否为宽高*3字节。 要求计算rgb文件三通道分量的熵。 验证: 新的改变 我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客: 全新的界面设计 ,将会带来全新的写作体验; 在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行展示; 增加了

spadeK2020的博客 606
上一篇: directshow过滤器图表-graph builder使用时的几点注意事项(易犯错误解析)
下一篇: 十大经典武侠小说
ucasliming
博客等级 码龄16年 126粉丝 59原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值