说明:

通过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 加载位图的更多相关文章

  1. Direct2D开发:从资源加载位图

    转载请注明出处:http://www.cnblogs.com/Ray1024 一.概述 Direct2D使用Windows图像处理组件 (WIC) 来加载位图.从文件加载位图的方法很简单,而且网上的教 ...

  2. SharpDX之Direct2D教程II——加载位图文件和保存位图文件

    本系列文章目录: SharpDX之Direct2D教程I——简单示例和Color(颜色) 绘制位图是绘制操作的不可缺少的一部分.在Direct2D中绘制位图,必须先利用WIC组件将位图加载到内存中,再 ...

  3. [Direct2D开发] 从资源加载位图

    转载请注明出处:http://www.cnblogs.com/Ray1024 一.概述 Direct2D使用Windows图像处理组件 (WIC) 来加载位图.从文件加载位图的方法很简单,而且网上的教 ...

  4. Direct2D开发:MFC下从资源文件中加载位图

    转载请注明出处:http://www.cnblogs.com/ye-ming 0X01 概述: 相对于GDI处理界面,Direct2D有得天独厚的优势,下图就是Direct2D与GDI的效果对比,wi ...

  5. Android中加载位图的方法

    Android中加载位图的关键的代码: AssetManager assets =context.getAssets(); //用一个AssetManager 对象来从应用程序包的已编译资源中为工程加 ...

  6. 【python游戏编程之旅】第四篇---pygame中加载位图与常用的数学函数。

    本系列博客介绍以python+pygame库进行小游戏的开发.有写的不对之处还望各位海涵. 在上一篇博客中,我们学习了pygame事件与设备轮询.http://www.cnblogs.com/msxh ...

  7. vs2010 单文档MFC 通过加载位图文件作为客户区背景

    实现效果: 这个其实是一个非常常见的功能,大家都会考虑给自己简单的工程做一个背景界面.其实只要在view类中重载OnEraseBkgnd()这个函数就好了. 代码如下: BOOL CdddView:: ...

  8. windows程序设计 加载位图图片

    现在网上随便下个jpg图片,用windows自带的画图工具打开,点击画图工具左上角,文件->另存为->选择bmp,点击保存,保存好后,就得到一张位图了. 得到的位图,位图的内存比原图片jp ...

  9. C++加载位图跟SOCKET通信的编写

    //将屏幕信息转换为位图结构 CDC *pDeskDC=GetDesktopWindow()->GetDC();//获取桌面的额画图对象 ; ; CDC memDC;//定义一个内存画布 mem ...

随机推荐

  1. 【算法Everyday】第三日 KMP算法

    题目 你知道的. 分析 分析不来. 代码 void OutputArray(int* pArr, int iLen) { ; i < iLen; i++) { printf("%d\t ...

  2. 从ulimit命令看socket的限制

      从ulimit命令看socket的限制 在Linux下面部署应用的时候,有时候会遇上Socket/File: Can’t open so many files的问题,比如还有Squid做代理,当文 ...

  3. C语言基础课程 第一课 Linux环境配置小实战httpserver

     网段我需要改成如下 10.重启网络服务 并且查看ip 11. 打开windows的浏览器数人Linux的IP地址出现REDHAT的欢迎界面 11.进入目录 12.编写一个简单的html脚本 13 ...

  4. 在外国网站上看到一个用artoolKit做的demo,学习了用gcd创建单列

    外国网站:http://www.raywenderlich.com/42266/augmented-reality-ios-tutorial-location-based 看了下里面的demo,源代码 ...

  5. 搜索(DLX):HDU 3663 Power Stations

    Power Stations Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)To ...

  6. hihoCoder 1389 Sewage Treatment 【二分+网络流+优化】 (ACM-ICPC国际大学生程序设计竞赛北京赛区(2016)网络赛)

    #1389 : Sewage Treatment 时间限制:2000ms 单点时限:2000ms 内存限制:256MB 描述 After years of suffering, people coul ...

  7. 【KMP】【最小表示法】NCPC 2014 H clock pictures

    题目链接: http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1794 题目大意: 两个无刻度的钟面,每个上面有N根针(N<=200000),每个 ...

  8. HDOJ 1214 圆桌会议

    Problem Description HDU ACM集训队的队员在暑假集训时经常要讨论自己在做题中遇到的问题.每当面临自己解决不了的问题时,他们就会围坐在一张圆形的桌子旁进行交流,经过大家的讨论后一 ...

  9. 外星人的供给站 (区间覆盖 t贪心)

    /** 区间覆盖问题 分析: 每个点可以确定两个圆心 圆心的范围形成 一个区间 在这个区间上以任意一点画圆便可将此点 包含在内 如果有两个点所确定的区间相交了 说明这两个点可以用一个圆包含在内 即用一 ...

  10. 深度克隆---js对象引用

    首先,我们要知道,javascript中除了基本类型(number,string,boolean,null,undefined)之外就是引用类型了,也可以说就是js对象了. 引用类型的赋值其实是对象保 ...