C++加載PNG圖片

CImage加載pnghui丟失Alpha通道。
使用GDI+就可以。
#include <Windows.h>
#include <Gdiplus.h>
#pragma comment(lib, "Gdiplus.lib")
using namespace Gdiplus;
using namespace DllExport;
ULONG_PTR gdipid;
// 初始化
GdiplusStartInput gsi;
GdiplusStart(&gsi, &gdipid);
// 加載圖片(常用格式均支持)
// API版
GpBitmap *bmp;
GdipCreateBitmapFormFile(L"文件名.png", &bmp);
HBITMAP hBmp;
SIZE sBmp;
GdipGetImageWidth((GpImage*)bmp, LPUINT(sBmp.cx));
GdipGetImageHeight((GpImage*)bmp, LPUINT(sBmp.cy));
GdipCreateHBITMAPFormBitmap(bmp, 0, &hBmp);
GdipDi***Image((GpImage*)bmp); // 記不到了所以打了*
// 類版
Bitmap *bmp = Bitmap::FormFile(L"文件名.png");
SIZE sBmp = {bmp->GetWidth(), bmp->GetHeight()};
HBITMAP hBmp = bmp->GetHBITMAP(0);
delete bmp;
// 這樣就把png加載到了,HBITMAP裏面,注意啊,畫png一定要用AlphaBlend或GdiAlphaBlend函數畫,纔有Alpha通道。
// 卸載GDI+
GdiplusShutdown(gdipid);


HBITMAP hBmp; // 加載過程已有這裏省去
HDC hMemDC = CreateCompatibleDC(0);
BLENDFUNCTION bf = {0, 0, 255, AC_SRC_ALPHA};
SelectObject(hMemDC, hBmp);
AlphaBlend(目標DC, 目標x, 目標y, 目標寬度, 目標高度, hMemDC, 來源x, 來源y, 來源寬度, 來源高度, bf);
DeleteDC(hMemDC);
這樣就可以快速畫出帶Alpha通道的png,把255改成其它數字可以調整透明度。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章