显示器物理尺寸的获取,EDID数据获取

网上查阅资料整理如下:
原理:由EnumDisplayDevices获取当前显示器的DISPLAY_DEVICE数据,取其中的DeviceID进行解析,获取Model和Driver,然后在注册表SYSTEM\\CurrentControlSet\\Enum\\DISPLAY\\中匹配到键值,取得其中的EDID数据。
头文件如下:
/********************************************************************
	created:	2016/01/21
	created:	21:1:2016   15:27
	file base:	XDisplayDevice
	file ext:	h
	author:		zhangweifang
	
	purpose:	显示设备相关API
*********************************************************************/
#ifndef _X_DISPLAY_DEVICE_H_
#define _X_DISPLAY_DEVICE_H_
//
#include <Windows.h>
#include <string>
using namespace std;
//
// 获取当前正在使用的Monitor
BOOL
XDD_GetActiveAttachedMonitor(
	OUT DISPLAY_DEVICE &ddMonitor                // 输出ddMonitor信息
	);

// 解析DeviceID得到LEN0028以及{4d36e96e-e325-11ce-bfc1-08002be10318}\0001
// DeviceID:MONITOR\LEN0028\{4d36e96e-e325-11ce-bfc1-08002be10318}\0001
BOOL
XDD_GetModelDriverFromDeviceID(
	IN  LPCWSTR lpDeviceID,                      // DeviceID
	OUT wstring &strModel,                       // 输出型号,比如LEN0028
	OUT wstring &strDriver                       // 输出驱动信息,比如{4d36e96e-e325-11ce-bfc1-08002be10318}\0001
	);

// 根据Model判断EDID数据是否正确
BOOL
XDD_IsCorrectEDID(
	IN  const BYTE *pEDIDBuf,                    // EDID数据缓冲区
	IN  DWORD dwcbBufSize,                       // 数据字节大小
	IN  LPCWSTR lpModel                          // 型号
	);

// 根据Model及Driver信息取得EDID数据
BOOL
XDD_GetDeviceEDID(
	IN  LPCWSTR lpModel,                         // 型号
	IN  LPCWSTR lpDriver,                        // Driver
	OUT BYTE *pDataBuf,                          // 输出EDID数据缓冲区
	IN DWORD dwcbBufSize,                        // 输出缓冲区字节大小,不可小于256
	OUT DWORD *pdwGetBytes = NULL                // 实际获得字节数
	);

// 获取当前Monitor的物理尺寸,单位CM
BOOL
XDD_GetActiveMonitorPhysicalSize(
	OUT DWORD &dwWidth,                          // 输出宽度,单位CM
	OUT DWORD &dwHeight                          // 输出高度&#
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
### 回答1: EDID(扩展显示标识数据)是显示器中的一个数据集,用于描述其特性和能力,供计算机或显卡驱动程序读取和理解。EDID数据包含了显示器的分辨率、刷新率、色彩空间、视频支持格式以及其他相关信息。在视频控制器(VC)与显示器之间建立连接时,VC会读取显示器EDID获取这些信息。 VC读取显示器EDID是通过I2C总线传输数据来完成的。I2C(主从式串行总线)是一种用于芯片间通信的协议,它允许VC与显示器通过几根数据线传输信息。通过发送特定的命令序列,VC可以请求读取显示器EDID数据。 当VC发出读取EDID的请求时,它会向显示器发送一个启动命令,指示显示器开始在I2C总线上提供EDID数据显示器会响应这个命令,并将EDID数据按照一定的格式发送回VC。VC会将接收到的数据解码,并提取出有用的信息供显卡驱动程序使用。 VC读取EDID的目的是为了确保计算机能够正确地识别和配置连接的显示器显示器的分辨率、刷新率和色彩空间等参数都是根据EDID数据来确定的。通过读取EDID,VC可以自动适配显卡输出信号,并保证显示器能够正常工作。 总之,VC读取显示器EDID是通过I2C总线传输数据来完成的。这个过程中,VC发送读取EDID的命令,显示器响应并传输EDID数据回VC,最终VC解析数据并使用其中的信息以正确配置显示器。 ### 回答2: vc读取显示器edid是为了获取显示器的详细信息。EDID(Extended Display Identification Data)是一种包含显示器技术参数的数据结构,包括显示器的制造商、型号、分辨率、刷新率、色彩能力等信息。 当VC与显示器连接后,它会向显示器发送一个查询EDID的指令。显示器收到指令后,会返回一个包含EDID数据块。VC通过解析这个数据块,可以获取显示器相关的信息。 VC读取显示器EDID有以下几个目的: 1. 显示器参数识别:通过读取EDID,VC可以获取显示器的分辨率、刷新率等技术参数,并根据这些参数来调整自己的输出设置,以确保与显示器的兼容性。 2. 显示器识别:通过读取EDID中的制造商和型号信息,VC可以识别出连接的显示器品牌和型号,并根据这些信息来配置显示器的驱动程序和特性支持。 3. 显示器校准:通过读取EDID中的色彩能力等信息,VC可以根据显示器的特性来进行色彩校准,以获得更准确的色彩显示效果。 总之,VC读取显示器EDID是为了了解并适配显示器的技术参数和特性,以提供最佳的显示效果和兼容性。这对于确保显示器和VC之间的正常工作以及提供良好的用户体验非常重要。 ### 回答3: VC(Video Controller,视频控制器)通过读取显示器EDID(Extended Display Identification Data,扩展显示识别数据)来获取有关显示器的详细信息。 EDID是一组存储在显示器内部的数据,包含了显示器的制造商信息、分辨率、刷新率、色彩能力以及其他支持的显示模式等。它可以以二进制格式进行编码,并通过I2C总线与VC进行通信。 VC通过发送I2C命令和地址,读取连接的显示器EDID读取EDID的主要目的是为了了解显示器物理特性和显示能力,以便于合理地配置和优化显示设置。根据EDID的内容,VC可以判断显示器的最大分辨率和刷新率,并与图形处理器进行匹配,以确保最佳的图像输出。此外,VC还可以根据EDID中的色彩能力信息,选择合适的色彩空间和显示模式,以提供最佳的图像显示效果。 读取EDID还可以提供额外的信息,例如显示器的型号、序列号、制造商、支持的音频格式等,这些信息对于用户和系统识别和管理显示器都非常有用。 综上所述,VC通过读取显示器EDID数据,能够了解到显示器的详细信息,从而为用户提供更准确、匹配的图像显示设置。这样可以保证显示器和系统之间的兼容性和最佳的视觉体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值