首页 > 其他分享 >D3D9实现图片显示

D3D9实现图片显示

时间:2024-10-12 16:11:15浏览次数:6  
标签:include return 实现 hwnd Release D3D9 device NULL 图片

include <directxsdk/d3d9.h>

include <directxsdk/d3dx9.h>

include <directxsdk/d3dx9tex.h>

include <windows.h>

include

int width = 1084;
int height = 628;

LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
switch (uMsg) {
case WM_DESTROY:
PostQuitMessage(0);
return 0;
default:
return DefWindowProc(hwnd, uMsg, wParam, lParam);
}
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
// 注册窗口类
WNDCLASS wc = {};
wc.lpfnWndProc = WindowProc;
wc.hInstance = hInstance;
wc.lpszClassName = "D3DWindowClass";
RegisterClass(&wc);

// 创建窗口
HWND hwnd = CreateWindowEx(
	0,
	"D3DWindowClass",
	"D3D Window",
	WS_OVERLAPPEDWINDOW,
	CW_USEDEFAULT, CW_USEDEFAULT, width, height,
	NULL, NULL, hInstance, NULL
);

if (!hwnd) {
	std::cerr << "Failed to create window." << std::endl;
	return -1;
}

ShowWindow(hwnd, nCmdShow);

// 初始化Direct3D
IDirect3D9* d3d = Direct3DCreate9(D3D_SDK_VERSION);
if (!d3d) {
	std::cerr << "Failed to create D3D object." << std::endl;
	return -1;
}

D3DPRESENT_PARAMETERS d3dpp = {};
d3dpp.Windowed = TRUE;
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
d3dpp.hDeviceWindow = hwnd;

IDirect3DDevice9* device;
if (FAILED(d3d->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hwnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, &d3dpp, &device))) {
	std::cerr << "Failed to create D3D device." << std::endl;
	d3d->Release();
	return -1;
}

// 加载图片
IDirect3DSurface9* surface;
if (FAILED(device->CreateOffscreenPlainSurface(width, height
	, D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT, &surface, NULL))) {
	std::cerr << "Failed to create surface." << std::endl;
	device->Release();
	d3d->Release();
	return -1;
}

// 从文件加载图像到表面
HRESULT hr = D3DXLoadSurfaceFromFile(
	surface,          // 目标表面
	NULL,             // 目标调色板
	NULL,             // 目标矩形
	"D:\\image.jpg",  // 源文件路径
	NULL,             // 源矩形
	D3DX_FILTER_NONE, // 过滤器
	0xFF000000,       // 颜色键
	NULL              // 图像信息
);

if (FAILED(hr)) {
	std::cerr << "Failed to load image from file." << std::endl;
	surface->Release();
	device->Release();
	d3d->Release();
	return -1;
}


// 渲染循环
MSG msg = {};
while (GetMessage(&msg, NULL, 0, 0)) {
	TranslateMessage(&msg);
	DispatchMessage(&msg);

	// 清除屏幕
	device->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0, 0, 0), 1.0f, 0);

	// 开始场景
	device->BeginScene();

	// 将表面绘制到屏幕上
	LPDIRECT3DSURFACE9 backBuffer;
	device->GetBackBuffer(0, 0, D3DBACKBUFFER_TYPE_MONO, &backBuffer);
	device->StretchRect(surface, NULL, backBuffer, NULL, D3DTEXF_NONE);

	// 结束场景
	device->EndScene();

	// 交换缓冲区
	device->Present(NULL, NULL, NULL, NULL);
}

// 释放资源
surface->Release();
device->Release();
d3d->Release();

return 0;

}

标签:include,return,实现,hwnd,Release,D3D9,device,NULL,图片
From: https://www.cnblogs.com/thinkinc999/p/18460748

相关文章

  • Winform MessageBox消息弹窗如何实现自动关闭
     使用了WindowsAPI函数FindWindow和SendMessage来查找消息框的窗口句柄并发送关闭消息实现方法publicclassAutoClosingMessageBox{System.Threading.Timer_timeoutTimer;string_caption;AutoClosingMessageBox(stringtext,stringcap......
  • 基于FIFO使用UART实现FPGA板与PC通信
    基于FIFO使用UART实现FPGA板与PC通信1.UART简介UART(通用异步收发传输器)是一种常用的串行通信协议,广泛用于FPGA与外部设备(如PC、传感器等)之间的通信。UART通信的核心是将并行数据转换为串行数据传输,然后在接收端再将串行数据恢复为并行数据。UART协议特点:异步通信:无需时钟......
  • 智能排线助力快消品企业实现高效与最优排线
    路线拜访是快消品行业深度分销模式中高效开发、管理和维护终端市场的重要方式。通过将门店归入固定的路线内,确保每家店都能按合理的频率去拜访,确保既不丢店、不漏店,又能在合理周期内给门店补货,达到业代工作效率最大化。所以对于企业而言,给业务人员的拜访路线做好最优编排,是一项很......
  • 雷池+frp 批量设置proxy_protocol实现真实IP透传
    需求内网部署safeline,通过frp让外网访问内部web网站服务,让safeline记录真实外网攻击IPsafeline跟frp都部署在同一台服务器:192.168.2.103frpclient配置frpc只需要在https上添加transport.proxyProtocolVersion="v2"即可,例如root@safeline:~#cat/etc/frp/frpc.to......
  • vscode写markdown插入图片视频并放在指定目录
    目录前言正文前言各种云文档非常好用,但是当你想把这些资料保存在本地时,markdown我觉得是最好的选择markdown编辑器也有很多,但我还是觉得vscode最好用,直接粘贴文件就可以插入也类似云文档的使用体验,但是想要指定目录就需要设置一下正文我会想要文件放在md文件所在......
  • 51单片机实现数码管显示
    51单片机实现数码管显示本次的实现效果方式采用模拟进行,芯片为AT89C51,开发软件为keil5,proteus目录上代码效果展示介绍上代码代码如下:#include<REGX51.H>//引用库文件#definekeyP3_0//按键引脚#definekey2P3_1unsignedintc=0,q=0,a=0;unsignedcharshu[10]={......
  • 汽车3d动效的作用!云渲染实现3d动效
    在汽车营销领域,3D动效技术以其独特的视觉冲击力和交互体验,正成为吸引消费者注意力的新利器。而云渲染技术的应用,更是让这些动效如虎添翼,实现了高效、低成本的3D视觉内容制作与分享。本文将探讨汽车3D动效的作用,并分析云渲染如何助力实现这些令人惊叹的视觉效果。一、汽车3d......
  • 利用线程池和网络动态库实现多人聊天室
    利用线程池和网络动态库实现多人聊天室概述本项目实现一个简单的多人聊天室,采用C语言编写,利用线程池和网络动态库,实现服务端消息转发和客户端消息接收。服务端服务端主要负责管理客户端连接,接收并转发消息。代码实现#include<stdio.h>#include<stdlib.h>#include......
  • 在K8S中,PodSecurityPolicy机制能实现哪些安全策略?
    在Kubernetes中,PodSecurityPolicy(PSP)是一种集群级别的资源对象,用于控制Pod如何运行,并确保其符合一定的安全要求。虽然PSP已经在Kubernetes1.21版本中被标记为弃用,并将在未来的版本中被移除,但在支持它的环境中,PSP可以实现多种安全策略。以下是一些PSP可以实现的安全策略示例:用......
  • SpringBoot实战教程:购物推荐网站的设计与实现
    3系统分析3.1可行性分析通过对本东大每日推购物推荐网站实行的目的初步调查和分析,提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。3.1.1技术可行性本东大每日推购物推荐网站采用JAVA作为开发语言,SpringBoot框......