Direct2D 加载位图
| 说明: |
通过WIC从文件加载位图.
可缩放后加载到内存.
| 源码: |
HRESULT LoadImageFormFile(
IWICImagingFactory *pWicFactory,
ID2D1RenderTarget *pRT,
PCTSTR fname,
DWORD dstWidth,
DWORD dstHeight,
ID2D1Bitmap **ppBitmap
)
{
IWICBitmapDecoder *pDecoder = NULL;
IWICBitmapFrameDecode *pFrame = NULL;
IWICBitmapScaler *pScaler = NULL;
IWICFormatConverter *pFormat = NULL;
HRESULT hr = pWicFactory->CreateDecoderFromFilename(
fname,
NULL,
GENERIC_READ,
WICDecodeMetadataCacheOnLoad,
&pDecoder
);
if ( SUCCEEDED(hr) )
{
hr = pDecoder->GetFrame(, &pFrame);
}
if ( SUCCEEDED(hr) )
{
hr = pWicFactory->CreateFormatConverter(&pFormat);
}
UINT width, height;
if ( SUCCEEDED(hr) )
{
hr = pFrame->GetSize(&width, &height);
}
if ( SUCCEEDED(hr) )
{
if (width)
{
FLOAT scalar = (FLOAT)dstWidth / (FLOAT)width;
width = (UINT)(width * scalar);
}
if (height)
{
FLOAT scalar = (FLOAT)dstHeight / (FLOAT)height;
height = (UINT)(height * scalar);
}
hr = pWicFactory->CreateBitmapScaler(&pScaler);
}
if ( SUCCEEDED(hr) )
{
hr = pScaler->Initialize(pFrame, width, height, WICBitmapInterpolationModeCubic);
}
if (SUCCEEDED(hr))
{
hr = pFormat->Initialize(pScaler, GUID_WICPixelFormat32bppPBGRA, WICBitmapDitherTypeNone, NULL, 0.0f, WICBitmapPaletteTypeMedianCut);
}
if ( SUCCEEDED(hr) )
{
hr = pRT->CreateBitmapFromWicBitmap(pFormat, ppBitmap);
}
SafeRelease(pDecoder);
SafeRelease(pFrame);
SafeRelease(pScaler);
SafeRelease(pFormat);
return hr;
}
Direct2D 加载位图的更多相关文章
- Direct2D开发:从资源加载位图
转载请注明出处:http://www.cnblogs.com/Ray1024 一.概述 Direct2D使用Windows图像处理组件 (WIC) 来加载位图.从文件加载位图的方法很简单,而且网上的教 ...
- SharpDX之Direct2D教程II——加载位图文件和保存位图文件
本系列文章目录: SharpDX之Direct2D教程I——简单示例和Color(颜色) 绘制位图是绘制操作的不可缺少的一部分.在Direct2D中绘制位图,必须先利用WIC组件将位图加载到内存中,再 ...
- [Direct2D开发] 从资源加载位图
转载请注明出处:http://www.cnblogs.com/Ray1024 一.概述 Direct2D使用Windows图像处理组件 (WIC) 来加载位图.从文件加载位图的方法很简单,而且网上的教 ...
- Direct2D开发:MFC下从资源文件中加载位图
转载请注明出处:http://www.cnblogs.com/ye-ming 0X01 概述: 相对于GDI处理界面,Direct2D有得天独厚的优势,下图就是Direct2D与GDI的效果对比,wi ...
- Android中加载位图的方法
Android中加载位图的关键的代码: AssetManager assets =context.getAssets(); //用一个AssetManager 对象来从应用程序包的已编译资源中为工程加 ...
- 【python游戏编程之旅】第四篇---pygame中加载位图与常用的数学函数。
本系列博客介绍以python+pygame库进行小游戏的开发.有写的不对之处还望各位海涵. 在上一篇博客中,我们学习了pygame事件与设备轮询.http://www.cnblogs.com/msxh ...
- vs2010 单文档MFC 通过加载位图文件作为客户区背景
实现效果: 这个其实是一个非常常见的功能,大家都会考虑给自己简单的工程做一个背景界面.其实只要在view类中重载OnEraseBkgnd()这个函数就好了. 代码如下: BOOL CdddView:: ...
- windows程序设计 加载位图图片
现在网上随便下个jpg图片,用windows自带的画图工具打开,点击画图工具左上角,文件->另存为->选择bmp,点击保存,保存好后,就得到一张位图了. 得到的位图,位图的内存比原图片jp ...
- C++加载位图跟SOCKET通信的编写
//将屏幕信息转换为位图结构 CDC *pDeskDC=GetDesktopWindow()->GetDC();//获取桌面的额画图对象 ; ; CDC memDC;//定义一个内存画布 mem ...
随机推荐
- Java版将EXCEL表数据导入到数据库中
1.采用第三方控件JXL实现 try { //实例化一个工作簿对象 Workbook workBook=Workbook.getWorkbook(new File("F://qzlx.xls ...
- 【Linux】鸟哥的Linux私房菜基础学习篇整理(二)
1. dumpe2fs [-bh] devicename:查询superblock信息.参数:-b:列出保留为坏道的部分:-h:列出superblock的数据,不会列出其他的区段内容. 2. df [ ...
- Linux驱动开发 -- 打开dev_dbg()
Linux驱动开发 -- 打开dev_dbg() -- :: 分类: LINUX linux设备驱动调试,我们在内核中看到内核使用dev_dbg来控制输出信息,这个函数的实质是调用printk(KER ...
- sql按照in中的顺序进行排序 mysql
经测试以下三种情况,都可以. SELECT a.id,a.name as goods_name,a.logoimg,b.name as store_name FROM sh_goods a LEFT ...
- Linux kernel ‘ip6_sk_dst_check’函数拒绝服务漏洞
漏洞名称: Linux kernel ‘ip6_sk_dst_check’函数拒绝服务漏洞 CNNVD编号: CNNVD-201307-070 发布时间: 2013-07-05 更新时间: 2013- ...
- 图论(无向图的割顶):POJ 1144 Network
Network Description A Telephone Line Company (TLC) is establishing a new telephone cable network. ...
- 浅谈JavaScript函数
JavaScript作为一种基于对象(非严格面向对象)的语言,函数在JS中的地位非同一般:用函数声明类和对象.甚至函数本身也是对象. 一.函数的三种声明方式辨析. 1.function命令 funct ...
- 值得关注的 10 个 Python 英文博客
英文原文:http://pythontips.com/2013/07/31/10-python-blogs-worth-following/ 中文翻译参考: http://python.jobbole ...
- 10382 - Watering Grass
Problem E Watering Grass Input: standard input Output: standard output Time Limit: 3 seconds n sprin ...
- 专业DBA 遇到的问题集
http://blog.csdn.net/mchdba/article/category/1596355/3