博客
关于我
加载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数据库必会的增删查改操作(CRUD)
查看>>
MySQL数据库性能分析与调优实践
查看>>
mysql数据库扫盲,你真的知道什么是数据库嘛
查看>>
mysql数据库批量插入数据shell脚本实现
查看>>
MySQL数据库操作
查看>>
MySQL数据库故障排错
查看>>
MySQL数据库无法远程连接的解决办法
查看>>
mysql数据库时间类型datetime、bigint、timestamp的查询效率比较
查看>>
MySQL数据库服务器端核心参数详解和推荐配置(一)
查看>>
mysql数据库死锁的产生原因及解决办法
查看>>
MySQL数据库的事务管理
查看>>
mysql数据库的备份与恢复
查看>>
Mysql数据库的条件查询语句
查看>>
MySQL数据库的高可用
查看>>
Mysql数据库相关各种类型的文件
查看>>
MYSQL数据库简单的状态检查(show processlist)
查看>>
MYSQL数据库简单的状态检查(show status)
查看>>
MySQL数据库系列
查看>>
MYSQL数据库自动本地/异地双备份/MYSQL增量备份
查看>>
mysql数据库表增添字段,删除字段、修改字段的排列等操作,还不快来
查看>>