DLL의 이미지 리소스를 로드하여 Skia의 SkBitmap 객체 생성
#include "utils.h"
#include "SkStream.h"
#include "SkImageDecoder.h"
#include <tchar.h>
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
"), 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
"), GetLastError());
OutputDebugString(szLog);
return NULL;
}
HGLOBAL hImgData = LoadResource(hModule, hRsrc);
if (hImgData == NULL)
{
_stprintf_s(szLog, 512, _T("LoadResource failed, error - %d\r
"), GetLastError());
OutputDebugString(szLog);
return NULL;
}
LPVOID lpData = LockResource(hImgData);
if (lpData == NULL)
{
_stprintf_s(szLog, 512, _T("LockResource failed, error - %d\r
"), 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
"));
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
"));
FreeResource(hImgData);
delete bitmap;
return NULL;
}
간단한 사용:
SkBitmap *bitmap = loadImageFromResource(IDB_CLEAR, _T("PNG"));
내가 추가한 것은 png 파일이고 rc 파일에는 이와 같은 문구가 있습니다.
IDB_CLEAR PNG "images\\icon-clear.png"
두 번째 열은 자원 유형입니다. loadImageFromResource를 호출할 때 지정한 유형은 여기와 일치합니다.
추가 참고 자료:
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
LoadLibrary에서 126 오류가 발생하면 원인이되는 파일 이름을 찾는 방법Loadlibrary에서 DLL을 동적으로 로드할 때 로드 실패입니다. 실패한 파일 이름은 알려주지 않습니다. 로드하고자 하는 DLL 자체를 로드할 수 없다면 이야기는 간단하지만, 대상 DLL이 다른 DLL을 로드하...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.