博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Direct2D WIC绘制图片
阅读量:2502 次
发布时间:2019-05-11

本文共 1964 字,大约阅读时间需要 6 分钟。

绘制图片需要用到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. 绘制图片。
pRenderTarget->BeginDraw();	//clear screen	pRenderTarget->Clear(D2D1::ColorF(D2D1::ColorF::White));	IWICImagingFactory* pIWICFactory = NULL;	IWICBitmapDecoder* pDecoder = NULL;	IWICBitmapFrameDecode* pFrame = NULL;	IWICFormatConverter* pConverter = NULL;	ID2D1Bitmap* pBitmap = NULL;	CoCreateInstance(CLSID_WICImagingFactory, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&pIWICFactory) );	//create a decoder	hr = pIWICFactory->CreateDecoderFromFilename(		TEXT("C:\\Users\\NET45.png"),		NULL,		GENERIC_READ,		WICDecodeMetadataCacheOnLoad,		&pDecoder		);	// Create the initial frame.	hr = pDecoder->GetFrame(0, &pFrame);	// Format convert the frame to 32bppPBGRA	hr = pIWICFactory->CreateFormatConverter(&pConverter);	//Initialize Converter	hr = pConverter->Initialize(		pFrame,                          // Input bitmap to convert		GUID_WICPixelFormat32bppPBGRA,   // Destination pixel format		WICBitmapDitherTypeNone,         // Specified dither pattern		NULL,                            // Specify a particular palette 		0.f,                             // Alpha threshold		WICBitmapPaletteTypeCustom       // Palette translation type		);	// create Bitmap	hr = pRenderTarget->CreateBitmapFromWicBitmap(		pConverter,		NULL,		&pBitmap		);	//get bimap size	D2D1_SIZE_F size = pBitmap->GetSize() ;	D2D1_POINT_2F upperLeftCorner = D2D1::Point2F(0.f, 0.f) ;	//draw bitmap	pRenderTarget->DrawBitmap(		pBitmap,		D2D1::RectF(		upperLeftCorner.x,		upperLeftCorner.y,		upperLeftCorner.x + size.width,		upperLeftCorner.y + size.height)		) ;	pRenderTarget->EndDraw();
关于WIC的详细介绍可以参考MSDN:

转载地址:http://hmlgb.baihongyu.com/

你可能感兴趣的文章
iOS 如何放大按钮点击热区
查看>>
ios设备唯一标识获取策略
查看>>
获取推送通知的DeviceToken
查看>>
Could not find a storyboard named 'Main' in bundle NSBundle
查看>>
CocoaPods安装和使用教程
查看>>
Beginning Auto Layout Tutorial
查看>>
block使用小结、在arc中使用block、如何防止循环引用
查看>>
iPhone开发学习笔记002——Xib设计UITableViewCell然后动态加载
查看>>
iOS开发中遇到的问题整理 (一)
查看>>
Swift code into Object-C 出现 ***-swift have not found this file 的问题
查看>>
为什么你的App介绍写得像一坨翔?
查看>>
RTImageAssets插件--@3x可自动生成@2x图片
查看>>
iOS开发的一些奇巧淫技
查看>>
linux的挂载的问题,重启后就挂载就没有了
查看>>
docker原始镜像启动容器并创建Apache服务器实现反向代理
查看>>
docker容器秒死的解决办法
查看>>
管理网&业务网的一些笔记
查看>>
eclipse安装插件的两种方式在线和离线
查看>>
linux系统分区文件系统划分札记
查看>>
Linux(SUSE 12)安装Tomcat
查看>>