博客
关于我
加载DLL中的图片资源生成Skia中的SkBitmap对象
阅读量:130 次
发布时间:2019-02-26

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

PPAPI Plugin在Windows下是DLL,可以嵌入图片文件,使用Skia绘图时需要根据DLL里的图片文件生成SkBitmap对象。下面是代码:

#include "utils.h"#include "SkStream.h"#include "SkImageDecoder.h"#include 
SkBitmap* loadImageFromResource(UINT resId, LPCTSTR lpType){ TCHAR szLog[512] = { 0 }; HMODULE hModule = NULL; if (FALSE == GetModuleHandleEx(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS , (LPCTSTR)loadImageFromResource, &hModule)) { _stprintf_s(szLog, 512, _T("GetModuleHandleEx failed, error - %d\r\n"), GetLastError()); OutputDebugString(szLog); return NULL; } HRSRC hRsrc = FindResource(hModule, MAKEINTRESOURCE(resId), lpType); if (hRsrc == NULL) { _stprintf_s(szLog, 512, _T("FindResource failed, error - %d\r\n"), GetLastError()); OutputDebugString(szLog); return NULL; } HGLOBAL hImgData = LoadResource(hModule, hRsrc); if (hImgData == NULL) { _stprintf_s(szLog, 512, _T("LoadResource failed, error - %d\r\n"), GetLastError()); OutputDebugString(szLog); return NULL; } LPVOID lpData = LockResource(hImgData); if (lpData == NULL) { _stprintf_s(szLog, 512, _T("LockResource failed, error - %d\r\n"), GetLastError()); OutputDebugString(szLog); return NULL; } DWORD dwSize = SizeofResource(hModule, hRsrc); SkMemoryStream memoryStream(lpData, dwSize); SkImageDecoder *decoder = SkImageDecoder::Factory(&memoryStream); if (!decoder) { OutputDebugString(_T("SkImageDecoder::Factory failed\r\n")); FreeResource(hImgData); return NULL; } SkBitmap *bitmap = new SkBitmap(); if (SkImageDecoder::kSuccess == decoder->decode(&memoryStream, bitmap, kBGRA_8888_SkColorType, SkImageDecoder::kDecodePixels_Mode)) { FreeResource(hImgData); return bitmap; } //error OutputDebugString(_T("SkImageDecoder::decode failed\r\n")); FreeResource(hImgData); delete bitmap; return NULL;}

使用非常简单:

SkBitmap *bitmap = loadImageFromResource(IDB_CLEAR, _T("PNG"));

注意我添加的是png文件,rc文件内有类似这样的语句:

IDB_CLEAR    PNG    "images\\icon-clear.png"

其中第二列是资源类型,调用loadImageFromResource时指定的类型与这里一致即可。


其他参考文章:

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

你可能感兴趣的文章
mysql 更新子表_mysql 在update中实现子查询的方式
查看>>
MySQL 有什么优点?
查看>>
mysql 权限整理记录
查看>>
mysql 权限登录问题:ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using password: YES)
查看>>
MYSQL 查看最大连接数和修改最大连接数
查看>>
MySQL 查看有哪些表
查看>>
mysql 查看锁_阿里/美团/字节面试官必问的Mysql锁机制,你真的明白吗
查看>>
MySql 查询以逗号分隔的字符串的方法(正则)
查看>>
MySQL 查询优化:提速查询效率的13大秘籍(避免使用SELECT 、分页查询的优化、合理使用连接、子查询的优化)(上)
查看>>
mysql 查询,正数降序排序,负数升序排序
查看>>
MySQL 树形结构 根据指定节点 获取其下属的所有子节点(包含路径上的枝干节点和叶子节点)...
查看>>
mysql 死锁 Deadlock found when trying to get lock; try restarting transaction
查看>>
mysql 死锁(先delete 后insert)日志分析
查看>>
MySQL 死锁了,怎么办?
查看>>
MySQL 深度分页性能急剧下降,该如何优化?
查看>>
MySQL 深度分页性能急剧下降,该如何优化?
查看>>
MySQL 添加列,修改列,删除列
查看>>
mysql 添加索引
查看>>
MySQL 添加索引,删除索引及其用法
查看>>
MySQL 用 limit 为什么会影响性能?
查看>>