UEFI原理与编程实践--图像显示GRAPHICS_OUTPUT_PROTOCOL

2024-06-07 05:18

本文主要是介绍UEFI原理与编程实践--图像显示GRAPHICS_OUTPUT_PROTOCOL,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

GOP,也就是GRAPHICS_OUTPUT_PROTOCOL的简称,GOP包含三个成员函数和一个成员变量:

Status = gBS->LocateProtocol (&gEfiGraphicsOutputProtocolGuid,NULL,(VOID **)&GraphicsOutput);
struct _EFI_GRAPHICS_OUTPUT_PROTOCOL {EFI_GRAPHICS_OUTPUT_PROTOCOL_QUERY_MODE  QueryMode;EFI_GRAPHICS_OUTPUT_PROTOCOL_SET_MODE    SetMode;EFI_GRAPHICS_OUTPUT_PROTOCOL_BLT         Blt;EFI_GRAPHICS_OUTPUT_PROTOCOL_MODE        *Mode;
};

成员函数 QueryMode,用于查询显示模式

Status = GraphicsOutput->QueryMode (GraphicsOutput, (UINT32) ModeNumber, SizeOfInfo, Info);Info->HorizontalResolutionInfo->VerticalResolution

成员函数 SetMode,用于设置显示模式,如设置为文本界面模式

Status = GraphicsOutput->SetMode (GraphicsOutput,(UINT32) ModeNumber);

成员函数Blt,块传输的简称,用于将图像输出到屏幕或从屏幕读取图像

typedef
EFI_STATUS
(EFIAPI *EFI_GRAPHICS_OUTPUT_PROTOCOL_BLT)(IN  EFI_GRAPHICS_OUTPUT_PROTOCOL            *This,IN  EFI_GRAPHICS_OUTPUT_BLT_PIXEL           *BltBuffer,   OPTIONAL//图像缓冲区IN  EFI_GRAPHICS_OUTPUT_BLT_OPERATION       BltOperation,//进行的操作,如输出到屏幕IN  UINTN                                   SourceX,//源的X坐标IN  UINTN                                   SourceY,//源的Y坐标IN  UINTN                                   DestinationX,//目的缓冲区的X坐标IN  UINTN                                   DestinationY,//目的缓冲区的Y坐标IN  UINTN                                   Width,//操作区域的宽度IN  UINTN                                   Height,//操作区域的高度IN  UINTN                                   Delta         OPTIONAL//图像缓冲区每行的字节数);

通过Blt函数,可以执行如下4种操作:

1、将整个屏幕填充为某个单一颜色

EFI_GRAPHICS_OUTPUT_BLT_PIXEL BltBuffer[]={0,0,255,0};Status = GraphicsOutput->Blt (GraphicsOutput,BltBuffer,//BltBuffer中的图像显示到屏幕上EfiBltVideoFill, 0,0,0,//(UINTN) (SizeOfX - Width) / 2,0,// (UINTN) (SizeOfY - Height) / 2,1024,//Width,768,//Height,0//Width * sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL));

2、将图片显示到屏幕

Status = GraphicsOutput->Blt (GraphicsOutput,BltBuffer,//BltBuffer中的图像显示到屏幕上EfiBltBufferToVideo, 0,0,0,//(UINTN) (SizeOfX - Width) / 2,0,// (UINTN) (SizeOfY - Height) / 2,1024,//Width,768,//Height,0//Width * sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL));

3、将屏幕区域复制到图像

Status = GraphicsOutput->Blt (GraphicsOutput,BltBuffer,//BltBuffer中的图像显示到屏幕上EfiBltVideoToVideo, 0,0,0,//(UINTN) (SizeOfX - Width) / 2,0,// (UINTN) (SizeOfY - Height) / 2,1024,//Width,768,//Height,0//Width * sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL));

4、复制屏幕区域到屏幕另一片区域

EFI_GRAPHICS_OUTPUT_BLT_PIXEL *BltBuffer;UINTN BufferSize = 1024*768*sizeof(EFI_GRAPHICS_OUTPUT_BLT_PIXEL);Status = gBS->AllocatePool(EfiLoaderData,(UINTN)Size,&BltBuffer)Status = GraphicsOutput->Blt (GraphicsOutput,BltBuffer,//BltBuffer中的图像显示到屏幕上EfiBltBufferToVideo, 0,0,0,//(UINTN) (SizeOfX - Width) / 2,0,// (UINTN) (SizeOfY - Height) / 2,1024,//Width,768,//Height,0//Width * sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL));

注意:Delta是图像缓冲区BltBuffer每行的字节数,若为0,则Delta的大小为Width * sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL)

EFI_GRAPHICS_OUTPUT_BLT_PIXEL定义了像素的格式,一些老旧显卡都的帧缓冲中,一个像素3个字节,现在大多数显卡帧缓冲都是一个像素4个字节,因为BMP图片中每个像素占3个字节,所以读取BMP图片的时候要转换成EFI_GRAPHICS_OUTPUT_BLT_PIXEL格式

成员变量 Mode,指向了当前的显示模式

SizeOfX = GraphicsOutput->Mode->Info->HorizontalResolution;
SizeOfY = GraphicsOutput->Mode->Info->VerticalResolution;

这篇关于UEFI原理与编程实践--图像显示GRAPHICS_OUTPUT_PROTOCOL的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

在C#中获取端口号与系统信息的高效实践

《在C#中获取端口号与系统信息的高效实践》在现代软件开发中,尤其是系统管理、运维、监控和性能优化等场景中,了解计算机硬件和网络的状态至关重要,C#作为一种广泛应用的编程语言,提供了丰富的API来帮助开... 目录引言1. 获取端口号信息1.1 获取活动的 TCP 和 UDP 连接说明:应用场景:2. 获取硬

Java内存泄漏问题的排查、优化与最佳实践

《Java内存泄漏问题的排查、优化与最佳实践》在Java开发中,内存泄漏是一个常见且令人头疼的问题,内存泄漏指的是程序在运行过程中,已经不再使用的对象没有被及时释放,从而导致内存占用不断增加,最终... 目录引言1. 什么是内存泄漏?常见的内存泄漏情况2. 如何排查 Java 中的内存泄漏?2.1 使用 J

基于WinForm+Halcon实现图像缩放与交互功能

《基于WinForm+Halcon实现图像缩放与交互功能》本文主要讲述在WinForm中结合Halcon实现图像缩放、平移及实时显示灰度值等交互功能,包括初始化窗口的不同方式,以及通过特定事件添加相应... 目录前言初始化窗口添加图像缩放功能添加图像平移功能添加实时显示灰度值功能示例代码总结最后前言本文将

Redis主从/哨兵机制原理分析

《Redis主从/哨兵机制原理分析》本文介绍了Redis的主从复制和哨兵机制,主从复制实现了数据的热备份和负载均衡,而哨兵机制可以监控Redis集群,实现自动故障转移,哨兵机制通过监控、下线、选举和故... 目录一、主从复制1.1 什么是主从复制1.2 主从复制的作用1.3 主从复制原理1.3.1 全量复制

Redis主从复制的原理分析

《Redis主从复制的原理分析》Redis主从复制通过将数据镜像到多个从节点,实现高可用性和扩展性,主从复制包括初次全量同步和增量同步两个阶段,为优化复制性能,可以采用AOF持久化、调整复制超时时间、... 目录Redis主从复制的原理主从复制概述配置主从复制数据同步过程复制一致性与延迟故障转移机制监控与维

四种简单方法 轻松进入电脑主板 BIOS 或 UEFI 固件设置

《四种简单方法轻松进入电脑主板BIOS或UEFI固件设置》设置BIOS/UEFI是计算机维护和管理中的一项重要任务,它允许用户配置计算机的启动选项、硬件设置和其他关键参数,该怎么进入呢?下面... 随着计算机技术的发展,大多数主流 PC 和笔记本已经从传统 BIOS 转向了 UEFI 固件。很多时候,我们也

SpringCloud配置动态更新原理解析

《SpringCloud配置动态更新原理解析》在微服务架构的浩瀚星海中,服务配置的动态更新如同魔法一般,能够让应用在不重启的情况下,实时响应配置的变更,SpringCloud作为微服务架构中的佼佼者,... 目录一、SpringBoot、Cloud配置的读取二、SpringCloud配置动态刷新三、更新@R

Linux中Curl参数详解实践应用

《Linux中Curl参数详解实践应用》在现代网络开发和运维工作中,curl命令是一个不可或缺的工具,它是一个利用URL语法在命令行下工作的文件传输工具,支持多种协议,如HTTP、HTTPS、FTP等... 目录引言一、基础请求参数1. -X 或 --request2. -d 或 --data3. -H 或

Redis主从复制实现原理分析

《Redis主从复制实现原理分析》Redis主从复制通过Sync和CommandPropagate阶段实现数据同步,2.8版本后引入Psync指令,根据复制偏移量进行全量或部分同步,优化了数据传输效率... 目录Redis主DodMIK从复制实现原理实现原理Psync: 2.8版本后总结Redis主从复制实

Docker集成CI/CD的项目实践

《Docker集成CI/CD的项目实践》本文主要介绍了Docker集成CI/CD的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录一、引言1.1 什么是 CI/CD?1.2 docker 在 CI/CD 中的作用二、Docke