DLL의 이미지 리소스를 로드하여 Skia의 SkBitmap 객체 생성

2904 단어 dllSkiaCEFPPAPI
PPAPI Plugin은 Windows에서 DLL로 이미지 파일을 포함할 수 있으며, Skia 드로잉을 사용할 때는 DLL의 이미지 파일에 따라 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를 호출할 때 지정한 유형은 여기와 일치합니다.
추가 참고 자료:
  • CEF Windows 개발 환경 구축
  • CEF PPAPI 플러그인 로드
  • VS2013 가장 간단한 PPAPI 플러그인 컴파일
  • PPAPI의 디자인 이해
  • PPAPI 플러그인과 브라우저의 상호 작용
  • Windows에서 CEF 컴파일
  • PPAPI 컴파일된 미디어stream_비디오 예제
  • PPAPI 플러그인의 드로잉 및 가져오기 이벤트 처리
  • PPAPI 플러그인에 로컬 창 만들기
  • PPAPI 플러그인과 브라우저의 통신
  • Windows에서 Skia
  • 를 소스에서 컴파일합니다.
  • PPAPI 플러그인에 Skia 드로잉 사용
  • 좋은 웹페이지 즐겨찾기