说明:

通过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. build Intent

    Intent用于activity之间, fragmetn之间, 或者APP间通信, 主要包含数据和Action两部分: 常见的action是字符串形式的activity指定 Intent intent ...

  2. Annikken Andee–Arduino与Android间的简易连接

    一个Arduino的兼容板,允许你显示并控制来自Android设备的Arduino应用.无需Anroid APP开发. 点击:观看视频 什么是Annikken Andee? Annikken Ande ...

  3. 14.5.3 Locks Set by Different SQL Statements in InnoDB

    14.5.3 Locks Set by Different SQL Statements in InnoDB 通过不同的SQL语句设置的锁 在InnoDB中 一个锁定读, 一个UPDATE 或者一个D ...

  4. 【转】Linux 套接字编程中的 5 个隐患

    地址:请点击这里

  5. 使用开源软件sentry来收集日志

    原文地址:http://luxuryzh.iteye.com/blog/1980364 对于一个已经上线的系统,存在未知的bug或者运行时发生异常是很常见的事情,随之而来的几点需求产生了: 1.系统发 ...

  6. hive 模块

  7. 如何修改WAMP中mysql数据库账号和密码

    WAMP安装好后,mysql密码是为空的,那么要如何修改呢?其实很简单,通过几条指令就行了,下面我就一步步来操作. 首先,通过WAMP打开mysql控制台. 提示输入密码,因为现在是空,所以直接按回车 ...

  8. Struts2接收参数的几种方式

    一.用Action属性 在action里定义要接收的参数,并提供相应的set和get方法. 如: public class LoginAction extends ActionSupport { pr ...

  9. [Angular 2] NgNonBindable

    If you want to print someting like {{content}} on the html, using ng-non-bindable directive: <div ...

  10. jquery自定义插件来实现分页的效果

    本节将介绍如何定义自己的jquery插入,实现分页效果,话不多说,.看看达到的效果: 分页插件 实现的代码例如以下: <!DOCTYPE HTML PUBLIC "-//W3C//DT ...