绘制图片需要用到WIC,WIC的功能包括:
  • 编解码图片。也可以自定义图片解码插件。
  • 读取图片元数据。
  • 图像处理(最高支持每通道32位)。
  • 内置支持一些流行的格式。包括:BMP v5, GIF 89a/m, ICO, JPEG, PNG 1.2, TIFF 6.0, Windows Media Photo.
WIC绘制图片是在GPU上进行的,所以效率较高


这里写一个简单的读取图片的例子,别忘了添加头文件:

#include "wincodec.h"

以及wic的Lib
windowscodecs.lib;

下面的是d2d必须的
d2d1.lib;
dxgi.lib;
dxguid.lib;


显示图片的流程如下:
  1. 初始化IWICImagingFactory的对象。
  2. 用IWICImagingFactory创建解码器。
  3. 打开文件,并获取一帧。
  4. 转码。
  5. 初始化。
  6. 创建图片。
  7. 绘制图片。

  1. pRenderTarget->BeginDraw();
  2.  
  3. //clear screen
  4. pRenderTarget->Clear(D2D1::ColorF(D2D1::ColorF::White));
  5.  
  6. IWICImagingFactory* pIWICFactory = NULL;
  7. IWICBitmapDecoder* pDecoder = NULL;
  8. IWICBitmapFrameDecode* pFrame = NULL;
  9. IWICFormatConverter* pConverter = NULL;
  10. ID2D1Bitmap* pBitmap = NULL;
  11.  
  12. CoCreateInstance(CLSID_WICImagingFactory, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&pIWICFactory) );
  13.  
  14. //create a decoder
  15. hr = pIWICFactory->CreateDecoderFromFilename(
  16. TEXT("C:\\Users\\NET45.png"),
  17. NULL,
  18. GENERIC_READ,
  19. WICDecodeMetadataCacheOnLoad,
  20. &pDecoder
  21. );
  22.  
  23. // Create the initial frame.
  24. hr = pDecoder->GetFrame(0, &pFrame);
  25.  
  26. // Format convert the frame to 32bppPBGRA
  27. hr = pIWICFactory->CreateFormatConverter(&pConverter);
  28.  
  29. //Initialize Converter
  30. hr = pConverter->Initialize(
  31. pFrame, // Input bitmap to convert
  32. GUID_WICPixelFormat32bppPBGRA, // Destination pixel format
  33. WICBitmapDitherTypeNone, // Specified dither pattern
  34. NULL, // Specify a particular palette
  35. 0.f, // Alpha threshold
  36. WICBitmapPaletteTypeCustom // Palette translation type
  37. );
  38.  
  39. // create Bitmap
  40. hr = pRenderTarget->CreateBitmapFromWicBitmap(
  41. pConverter,
  42. NULL,
  43. &pBitmap
  44. );
  45.  
  46. //get bimap size
  47. D2D1_SIZE_F size = pBitmap->GetSize() ;
  48. D2D1_POINT_2F upperLeftCorner = D2D1::Point2F(0.f, 0.f) ;
  49.  
  50. //draw bitmap
  51. pRenderTarget->DrawBitmap(
  52. pBitmap,
  53. D2D1::RectF(
  54. upperLeftCorner.x,
  55. upperLeftCorner.y,
  56. upperLeftCorner.x + size.width,
  57. upperLeftCorner.y + size.height)
  58. ) ;
  59.  
  60. pRenderTarget->EndDraw();

关于WIC的详细介绍可以参考MSDN:

Direct2D WIC绘制图片的更多相关文章

  1. 杂谈SharpDx中的WIC组件——我们需要WIC的图片编码功能么?

    在前文 SharpDX之Direct2D教程II——加载位图文件和保存位图文件 中,发现在VB2010中不能很好的运用SharpDx中的WIC组件进行图片的编码工作.可能是我的设置问题,也可能是Sha ...

  2. UWP&WP8.1 重新绘制图片 WriteableBitmap用法 图片转byte[]数组,byte[]数组转图片

    ---恢复内容开始--- WriteableBitmap 是UWP和WP8.1绘制图片的,重组图片的最重要方法.方法较为简单,方法多样性. 通过查看文档,WriteableBitmap的继承性是    ...

  3. html5 绘制图片 drawImage

    要在绘图上下文中绘制图片,可以使用 drawImage 方法.该方法有三种不同的参数: drawImage(image,dx,dy) drawImage(image,dx,dy,dw,dh) d ...

  4. 使用html5 canvas绘制图片

    注意:本文属于<html5 Canvas绘制图形入门详解>系列文章中的一部分.如果你是html5初学者,仅仅阅读本文,可能无法较深入的理解canvas,甚至无法顺畅地通读本文.请点击上述链 ...

  5. Android Canvas使用drawBitmap绘制图片

    1.基本的绘制图片方法 //Bitmap:图片对象,left:偏移左边的位置,top: 偏移顶部的位置 drawBitmap(Bitmap bitmap, float left, float top, ...

  6. android中Canvas使用drawBitmap绘制图片

    1.主要的绘制图片方法 //Bitmap:图片对象,left:偏移左边的位置,top: 偏移顶部的位置     drawBitmap(Bitmap bitmap, float left, float ...

  7. lufylegend库 LGraphics绘制图片

    lufylegend库 LGraphics绘制图片 <!DOCTYPE html> <html lang="en"> <head> <me ...

  8. MATLAB坐标系中绘制图片

    MATLAB坐标系中绘制图片 方法一 使用图片坐标循环的方式,代码如下. clear,clc,close all tic; map=imbinarize(imread('map.bmp'));%map ...

  9. Android 音视频开发(一) : 通过三种方式绘制图片

    版权声明:转载请说明出处:http://www.cnblogs.com/renhui/p/7456956.html 在 Android 音视频开发学习思路 里面,我们写到了,想要逐步入门音视频开发,就 ...

随机推荐

  1. UVA 719 / POJ 1509 Glass Beads (最小表示法/后缀自动机)

    题目大意: 给出一个长度为N的字符串,求其字典序最小的循环同构. N<=10W. 算法讨论: 算法一.最小表示法.定义题. 算法二.后缀自动机. Codes: #include <iost ...

  2. Mapper映射语句高阶应用——ResultMap

    resultMap 元素是MyBatis 中最重要最强大的元素.它就是让你远离 90%的需要从结果 集中取出数据的 JDBC代码的那个东西, 而且在一些情形下允许你做一些 JDBC 不支持的事 情. ...

  3. easyui datagrid detailview嵌套datagrid的问题

    解决问题办法来自 http://www.coding123.net/article/20141113/easyui-datagrid-datailview-use-sub-datagrid-not-a ...

  4. js特殊字符转义

    点的转义:. ==> \\u002E 美元符号的转义:$ ==> \\u0024 乘方符号的转义:^ ==> \\u005E 左大括号的转义:{ ==> \\u007B 左方括 ...

  5. apache和tomcat的区别

    Web服务器父与子 Apache和Tomcat区别 经常在用Apache和Tomcat等这些服务器时,你总感觉还是不清楚他们之间有什么关系.在用Tomcat的时候总出现Apache,总感到迷惑,到底谁 ...

  6. Yii2.0 UrlManager

    服务器软件的配置与1.0一致即可.. 在组件中进行如下配置: 'urlManager' => [ 'enablePrettyUrl' => true, 'showScriptName' = ...

  7. shell练习--批量创建账号

    #!/bin/bash #By spinestars #-- #cksum5位数获取方法,可能有重复 #pd="user`head -200 /dev/urandom | cksum | h ...

  8. text-overflow 文字溢出时的设置

    text-overflow : clip | ellipsis clip: 不显示省略标记(...),而是简单的裁切. ellipsis: 当对象内文本溢出时显示省略标记(...) 设置或检索是否使用 ...

  9. usb开发笔记

    U盘应属于海量存储类. USB海量存储设备,又包括通用海量存储子类,CDROM,Tape等,U盘实际上属于海量存储类中通用海量存储子类.通用海量存储设备实现上是基于块/扇区存储的设备. USB组织定义 ...

  10. 转:Dynamic Binding Of RDLC To ReportViewer

    Introduction I was struggling to find the solution to bind rdlc dynamically to reportviewer .We had ...