BIOS实战之读取文件--BMP图片显示

2024-06-07 05:18

本文主要是介绍BIOS实战之读取文件--BMP图片显示,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本节直接贴主要的代码:

#include "DisplayBmpTest.h"EFI_STATUS
EFIAPI
ShellAppMain (IN UINTN Argc,IN CHAR16 **Argv)
{EFI_STATUS                       Status;EFI_GRAPHICS_OUTPUT_PROTOCOL     *GraphicsOutput = NULL;UINT8                            *DataBuffer;UINTN                           DataSize;EFI_GRAPHICS_OUTPUT_BLT_PIXEL    *Blt = NULL;UINTN                            BltSize;UINTN                            Height;UINTN                            Width;Status = gBS->LocateProtocol (&gEfiGraphicsOutputProtocolGuid,NULL,(VOID **)&GraphicsOutput);if (EFI_ERROR (Status)) {GraphicsOutput = NULL;Print (L"locate protocol gEfiGraphicsOutputProtocolGuid is error!\n");return Status;}Status = ReadFile (Argv[1], &DataBuffer, &DataSize);if (EFI_ERROR (Status)) {Print (L"Read bmp file to buffer is error!\n");return Status;}Status = TranslateBmpToGopBlt ((VOID *)DataBuffer,DataSize,&Blt,&BltSize,&Height,&Width);if (EFI_ERROR (Status)) {if (Blt != NULL) {FreePool (Blt);}Print (L"TranslateBmpToGopBlt is error!\n");return Status;}Status = GraphicsOutput->Blt (GraphicsOutput,Blt,EfiBltBufferToVideo,0,0,0x0,0x0,Width,Height,Width * sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL));if (EFI_ERROR (Status)) {Print (L"GraphicsOutput Blt is error!\n");return Status;}if (Blt != NULL)FreePool (Blt);Status = gST->ConOut->EnableCursor(gST->ConOut,TRUE);return Status;
}

运行后,我们就能读取自己想要显示的图片,并进行显示:

 这里存放了两个位置,一个根目录,一个自己创建的目录,都能正常显示,进行BIOS更新也是同样的道理,读取文件后,进行SPI FLASH的擦写,擦写要注意一点,最小擦写为4k,也就是0x1000。

这篇关于BIOS实战之读取文件--BMP图片显示的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1038260

相关文章

Java使用Spire.Doc for Java实现Word自动化插入图片

《Java使用Spire.DocforJava实现Word自动化插入图片》在日常工作中,Word文档是不可或缺的工具,而图片作为信息传达的重要载体,其在文档中的插入与布局显得尤为关键,下面我们就来... 目录1. Spire.Doc for Java库介绍与安装2. 使用特定的环绕方式插入图片3. 在指定位

idea粘贴空格时显示NBSP的问题及解决方案

《idea粘贴空格时显示NBSP的问题及解决方案》在IDEA中粘贴代码时出现大量空格占位符NBSP,可以通过取消勾选AdvancedSettings中的相应选项来解决... 目录1、背景介绍2、解决办法3、处理完成总结1、背景介绍python在idehttp://www.chinasem.cna粘贴代码,出

Java 队列Queue从原理到实战指南

《Java队列Queue从原理到实战指南》本文介绍了Java中队列(Queue)的底层实现、常见方法及其区别,通过LinkedList和ArrayDeque的实现,以及循环队列的概念,展示了如何高效... 目录一、队列的认识队列的底层与集合框架常见的队列方法插入元素方法对比(add和offer)移除元素方法

Spring Boot基于 JWT 优化 Spring Security 无状态登录实战指南

《SpringBoot基于JWT优化SpringSecurity无状态登录实战指南》本文介绍如何使用JWT优化SpringSecurity实现无状态登录,提高接口安全性,并通过实际操作步骤... 目录Spring Boot 实战:基于 JWT 优化 Spring Security 无状态登录一、先搞懂:为什

C++11中的包装器实战案例

《C++11中的包装器实战案例》本文给大家介绍C++11中的包装器实战案例,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录引言1.std::function1.1.什么是std::function1.2.核心用法1.2.1.包装普通函数1.2.

Nginx概念、架构、配置与虚拟主机实战操作指南

《Nginx概念、架构、配置与虚拟主机实战操作指南》Nginx是一个高性能的HTTP服务器、反向代理服务器、负载均衡器和IMAP/POP3/SMTP代理服务器,它支持高并发连接,资源占用低,功能全面且... 目录Nginx 深度解析:概念、架构、配置与虚拟主机实战一、Nginx 的概念二、Nginx 的特点

Spring IOC核心原理详解与运用实战教程

《SpringIOC核心原理详解与运用实战教程》本文详细解析了SpringIOC容器的核心原理,包括BeanFactory体系、依赖注入机制、循环依赖解决和三级缓存机制,同时,介绍了SpringBo... 目录1. Spring IOC核心原理深度解析1.1 BeanFactory体系与内部结构1.1.1

Redis 命令详解与实战案例

《Redis命令详解与实战案例》本文详细介绍了Redis的基础知识、核心数据结构与命令、高级功能与命令、最佳实践与性能优化,以及实战应用场景,通过实战案例,展示了如何使用Redis构建高性能应用系统... 目录Redis 命令详解与实战案例一、Redis 基础介绍二、Redis 核心数据结构与命令1. 字符

在C#中读取文件的六种主流方法详解

《在C#中读取文件的六种主流方法详解》在C#中读取文件有多种方法,不同方式适用于不同场景(小型文件、大型文件、文本文件或二进制文件),本文给大家介绍了6种主流方法以及其适用场景,需要的朋友可以参考下... 目录方法1:File.ReadAllText(读取整个文本文件)方法2:File.ReadAllLin

在SpringBoot+MyBatis项目中实现MySQL读写分离的实战指南

《在SpringBoot+MyBatis项目中实现MySQL读写分离的实战指南》在SpringBoot和MyBatis项目中实现MySQL读写分离,主要有两种思路:一种是在应用层通过代码和配置手动控制... 目录如何选择实现方案核心实现:应用层手动分离实施中的关键问题与解决方案总结在Spring Boot和