win32 解析、显示webp图片,及位图透明

win32 解析、显示webp图片,及位图透明

cpp 复制代码
CImage img;

#include <webp/decode.h>
#include <fstream>
#include <wingdi.h>

void parse(CDC* dc)
{
	std::ifstream ifs("None-1.webp", std::ios::binary);
	ifs.seekg(0, std::ios::end);
	auto size = ifs.tellg();
	ifs.seekg(0, std::ios::beg);

	std::vector<uint8_t> data(size);
	ifs.read((char*)data.data(), data.size());
	ifs.close();

	int width = 0;
	int height = 0;
	auto ret = WebPGetInfo(data.data(), size, &width, &height);

	//WebPDecoderConfig config;
#if 0
	auto webpdata = WebPDecodeRGBA(data.data(), size, &width, &height);
	for (int of = 0, max = width * height * 4; of < max; of += 4) {
		auto b = webpdata[of + 0];
		auto g = webpdata[of + 1];
		auto r = webpdata[of + 2];
		webpdata[of + 0] = r;
		webpdata[of + 1] = g;
		webpdata[of + 2] = b;
		//webpdata[of+0] = 255; // blue
		//webpdata[of+1] = 255; // green
		//webpdata[of+2] = 255; // red
		webpdata[of+3] = 0;
	}
#else 
	auto webpdata = WebPDecodeBGRA(data.data(), size, &width, &height);
#endif

	std::cout << "width: " << width << ", height: " << height << std::endl;

	uint32_t nPlanes = 1;
	uint32_t nBitCount = 4 * 8;
	auto cj = (((width * nPlanes * nBitCount + 15) >> 4) << 1) * height;
	std::cout << "buffer size: " << cj << std::endl;

	auto hbitmap = CreateBitmap(width, height, nPlanes, nBitCount, webpdata);
	//uint32_t errno_ = ERROR_INVALID_BITMAP;
	std::cout << "create bitmap: " << hbitmap << std::endl;

	CDC memDC;						//定义一个显示设备对象
	memDC.CreateCompatibleDC(dc);			//创建CDC兼容设备
	memDC.SetBkMode(TRANSPARENT);
	memDC.SelectObject(hbitmap);					//设备选择当前的图纸-位图

	DeleteObject(hbitmap);

	dc->SetStretchBltMode(STRETCH_HALFTONE);
	dc->StretchBlt(100, 100, 100, 100, &memDC, 0, 0, width, height, SRCAND);
	//dc->BitBlt(100, 100, width, height, &memDC, 0, 0, SRCAND);
	//dc->TransparentBlt(100, 100, width, height, &memDC, 0, 0, width, height, 0x00ffff00);
}
相关推荐
江梦寻4 天前
如何使用 Python+Flask+win32print 实现简易网络打印服务
开发语言·后端·python·flask·pytest·web3.py·win32
0xCC说逆向1 个月前
Windows图形界面(GUI)-QT-C/C++ - QT 文本编辑控件详解
java·c语言·开发语言·c++·windows·qt·win32
0xCC说逆向1 个月前
Windows图形界面(GUI)-QT-C/C++ - QT Stacked Widget
c语言·开发语言·c++·windows·qt·win32
0xCC说逆向2 个月前
Windows图形界面(GUI)-QT-C/C++ - Qt键盘与鼠标事件处理详解
c语言·开发语言·c++·windows·qt·win32·1024程序员节
0xCC说逆向2 个月前
Windows图形界面(GUI)-QT-C/C++ - Qt List Widget详解与应用
c语言·开发语言·c++·windows·qt·win32·1024程序员节
0xCC说逆向2 个月前
Windows图形界面(GUI)-QT-C/C++ - Qt按钮控件详解
c语言·开发语言·c++·windows·qt·win32
0xCC说逆向2 个月前
Windows图形界面(GUI)-QT-C/C++ - Qt控件与布局系统详解
c语言·开发语言·c++·windows·qt·mfc·win32
0xCC说逆向2 个月前
Windows图形界面(GUI)-QT-C/C++ - Qt图形绘制详解
c语言·开发语言·c++·windows·qt·mfc·win32
Peter(阿斯拉)2 个月前
[Win32/ATL]_[初级]_[处理WM_PAINT消息注意事项]
win32·卡死·文件对话框·wtl·wm_paint·beginpaint
!win !3 个月前
WebP图片使用踩坑
小程序·uniapp·webp