directshow中使用StretchDIBits和AlphaBlend实现ARGB32图片的无损缩放
来源:互联网 发布:蒋大为国籍 知乎 编辑:程序博客网 时间:2024/05/22 03:01
原文地址:http://blog.csdn.net/nkliming/article/details/8292689
之前使用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。
//END ICTwangbiao
- directshow中使用StretchDIBits和AlphaBlend实现ARGB32图片的无损缩放
- directshow中使用StretchDIBits和AlphaBlend实现ARGB32图片的无损缩放
- 在ScrollView中使用pinch实现图片的缩放
- c# 图片无损缩放类
- c# 图片无损缩放类
- 使用多点触控 实现图片的缩放和移动
- StretchDIBits 的使用
- 用AlphaBlend实现图片变暗
- 图片无损压缩 图片无损等比例缩放
- 关于CImage和AlphaBlend的透明PNG图片显示问题
- 使用Matlab实现对图片的缩放
- 使用Matlab实现对图片的缩放
- iOS 使用UIScrollView实现图片的缩放
- UIImageView实现图片的移动和缩放
- Android-实现图片的拖动和缩放
- nginx实现图片的缩放和裁剪
- Android实现图片的缩放和拖动
- android中图片的拖拉和缩放
- ThinkPHP-RBAC
- ArrayDemo数组的定义及遍历
- Displays high water mark statistics
- WPF中的引擎和编程框架
- centos 设置定时任务执行指定脚本。
- directshow中使用StretchDIBits和AlphaBlend实现ARGB32图片的无损缩放
- centos源码编译svn
- 存储过程、函数、触发器
- Android四种动画
- 浏览器缓存机制
- Oracle RAC failover 测试(连接时故障转移)
- sharepoint 2010 如何给文档库或自定义列表添加评论功能
- AspNetPager 修改 然后返回当前页
- Activity生命周期