??xml version="1.0" encoding="utf-8" standalone="yes"?>
看完囄链接Q?/p>
用VS新徏一个win32控制台应用程?我们假设工程名ؓQHello?
选择工具->选项->目和解x?>VC++目录?/font>
(1) 选择“可执行文?#8221;Q在里面dQC:\Qt4.7.0\bin;
(2) 选择“包含文g”Q在里面dQC:\Qt4.7.0\include; C:\Qt4.7.0\include\Qt; C:\Qt4.7.0\include\QtCore; C:\Qt4.7.0\include\QtGui
(3) 选择“库文?#8221;Q在里面dQC:\Qt4.7.0\libQ?
二、开始编E?
1. 选择菜单上的“QT”选项- >“Launch Designer” ,启动designer : 攑օ一?#8220;label”,内容写ؓQhelloQT。然后保存ؓHello.uiQ再它d到源文g中?/font>
叛_“Hello.ui”->“属?#8221;->“自定义生成步?#8221;Q?/font>
命o行:uic.exe Hello.ui -o HelloUi.h
输出QHelloUi.h
附加依赖:uic.exe; Hello.ui
然后Q点?#8220;定”。这时再叛_“Hello.ui”Q选择“~译”Q则会生成HelloUi.h。将它添加到工程中?/font>
2. 在Hello.cpp中编写代码:
3. 选择“目”Q?#8220;Hello属?#8221;Q?#8220;配置属?#8221;Q?/font>
(1) “常规”Q选择“字符?#8221;?#8220;使用多字节字W集”Q?/font>
(2) “调试”Q填?#8220;环境”gؓQPATH=C:\Qt4.7.0\binQ?/font>
填写“合ƈ环境”gؓQ是Q?/font>
(3) “链接?#8221;Q进?#8220;常规”选项Q填?#8220;附加库目?#8221;为:C:\Qt4.7.0\lib;
q入“输入”选项Q填?#8220;附加依赖?#8221;为:qtcore4.lib qtgui4.lib
Q注意,q两个库之间为空|不能写逗号Q?/font>
信号signals的声明是头文件中q行的(槽的声明也在头文件中声明Q同时要在类声明的开始处加上Q_OBJECT语句Q这告诉编译器在编译之前必ȝmoc工具q行扩展Q,q且moc 工具会注意不要将信号定义在实现文件中Q用signals关键字标CZ号声明区Q随后可声明自己的信受?/font>
信号signals没有public\private\protected{属性,q点不同于slots?/font>
信号signals的返回gؓvoid
槽slots有public slots、private slots、protected slots (Ҏ)
信号signals/事g->Q驱动)槽slots/Ҏ
QT的元对象pȝ为QT提供了对象间通信的信号与槽机制、实时类型信息、动态属性系l等斚w的功能?/font>
元对象系l在QT中主要有以下三个部分构成QQObjectcRQ_OBJECT宏、元对象~译器moc
3.vs中QT昄中文Q?/font>
#include <QTextCodec>
QTextCodec::setCodecForTr(QTextCodec::codecForName("gb18030"));
QFont font("Times",12,QFont::Normal,FALSE);
app.setFont(font);
QTextCodec::setCodecForTr(QTextCodec::codecForName("gb18030"));
//QFont font("Times",12,QFont::Normal,FALSE);
//a.setFont(font);
4.QActionc?/font>的用?/font>
1、QAction::QAction ( const QString & text, QObject * parent )
QActioncȝ构造函C一Q利用textQparent创徏QAction对象。QAction对象一般ؓ菜单中的菜单,比如 "文g"菜单?新徏"选项是一个QAction对象Q?/font>
上述构造函Ctext成员变量 即ؓ菜单Ҏ表示的内?/font>
用法QQAction *newAction = new QAction(tr("&New"),this);
2、void QAction::setIcon ( const QIcon & icon )
该函数可讄菜单名U前的图?/font>
用法QnewAction->setIcon(QIcon(":/images/new.png"));
3、void QAction::setShortcut ( const QKeySequence & shortcut );
讄QAction对象执行的快捷键
用法QnewAction->setShortcut(tr("Ctrl+N"));
4、void QAction::setStatusTip ( const QString & statusTip );
讄当鼠标移动到“动作”上时Q状态栏昄的提C?/font>
5、void QAction::setVisible ( bool );
讄“动作”昄与否Q当形参为true是,“动作”表示?/font>
6、void QAction::triggered ( bool checked = false ) [signal]
此函Cؓ信号Q当用户触发?#8220;动作”Ӟ此信号发。例如用LM菜单中的菜单等?/font>
此函C般用法ؓQ在QObject::connectQ)函数中作Z号参敎ͼ用于触发“动作”所对应执行的槽函数——实现“动作”的功能函敎ͼ例如Q?#8220;新徏”按钮被用h下,
所需要的功能可能 是新Z个文档,那么新徏一个文档的动作在q个槽函C实现。至于此信号函数中的形参暂时可以忽略。以后会在介lQObjectcM的静态方法connect()函数时详l解说?/font>
7、void QAction::setCheckable ( bool );
此函数用于设|QActioncM的私有变量: bool checkable Q此属性用以提?#8220;动作”是否为复选动作,例如Qt Creator?#8220;控g”菜单中的“全屏”菜单即为复选动?/font>
菜单
1、void QMainWindow::setCentralWidget ( QWidget * widget );
此方法作用ؓ讄传入部gZH口布局的中心领域部件。传入部件可ZQ意的部g或QWidgetcȝ子类部g。对?#8220;部g”q个词的理解可以理解为某机器上的一个螺丝、一个配件等{,其实部g是Z和某配g的一个抽象感念嘛Q他们都叫做部gQ但是却有着不同的作用和形状。以后会遇到很多cȝ承QWidgetcȝ。相信大安比笔者聪明,或许我是在说些废话,呵呵?/font>
举例Q?/font>
在自定义的承于QMainWindow的来构造函数里面:
QTableWidget *table = new QTableWidgetQ?nbsp; //QTableWidgetl承于QWidgetc;
setCentralWidget(table);
2、void QMainWindow::setWindowIcon ( const QIcon & icon );
讄H口左上角图标,支持PNG、BMP、GIF、FPEG、PNM、XBM、XPM格式文g?/font>
一下ؓ几种GUI应用E序提供资源的方法:
①图片存入文Ӟ在程序运行时加蝲
②XPM文g包含在源E序中,因ؓXPM文g是有效的C++文g
③使用Qt的资源机?#8212;———此种方式不仅仅支持图片格式文Ӟ而且支持M格式的文?/font>
3、QMenuBar *QMainWindow::menuBar() const;
此方法返回一个主H口的菜单栏对象指针。如果在调用此方法时Q主H口不存在菜单栏Q则此方法会创徏一个空的菜单栏。在Mac应用E序中,如想在多个主H口之间׃n一个菜单栏Q则需要用QMenuBar *menuBar = new QMenuBar(0);形式创徏菜单栏,卛_Z个无爉件的菜单栏对象?/font>
q里解释一下什么叫做父部gQ初学一定对q个概念不理解,q里的父部g不是C++中类的承关p,而是部g与部件的关系。我也是学习了一D|间才慢慢悟出q里面的道理的。我看的是《C++ GUI Programming with Qt 4》英文原版,本来理解h有些障,再遇到这h的概念词汇,更是不知其所云。ؓ什么看英文原版书呢Q个得国内翻译的不是很到位,可能在某个地Ҏ关键点给我造成误导Q貌似扯q了。。。即说说爉件是个什么东西,现在为大家打个比方,一张电脑桌由多个部件构成,如桌面,桌子腿,抽屉{等Q抽屉上面有抽屉把手Q那么抽屉就是抽屉把手的爉Ӟ电脑桌就是抽屉的爉件。相信这栯释,大家一定就会理解了?/font>
4、QToolBar * QMainWindow::addToolBar ( const QString & title );
此函Cؓ重蝲函数Q其余两个ؓ已创Z工具?QToolBar)对象Ӟ工h对象d到QMainWindow对象中。下面就会马上列两个cL法。在调用此方法时Q会创徏一个QToolBar对象Q返回这个对象的指针Qƈ在主H口剙工具栏区域中昄?/font>
5、void QMainWindow::addToolBar ( Qt::ToolBarArea area, QToolBar * toolbar );
与上个函数构成重载关p,此函数第二个形参为已定义好的工具栏对象指针,W一个Ş参工h表示的位|,此Ş参ؓ枚D型变量?/font>
工具栏表CZ|共4U,卛_右上下:
(1) Qt::LeftToolBarArea 0x1
(2) Qt::RightToolBarArea 0x2
(3) Qt::TopToolBarArea 0x4
(4) Qt::BottomToolBarArea 0x8
6、void QMainWindow::addToolBar ( QToolBar * toolbar );
与调?addToolBar(Qt::TopToolBarArea, toolbar) Ҏ效果相同Q即调用 addToolBar(Qt::TopToolBarArea, toolbar) ҎQ工h昄区域默认ZH口剙?/font>
7、QStatusBar *QMainWindow::statusBar() const;
当主H口状态栏不存在时Q创建状态栏Qƈq回状态栏对象指针。一般在自定义QMainWindow子类的构造函数时使用Q创建状态栏对象。创建后Q添加QLabel对象Q以昄ȝ口状态或菜单栏中按钮的状态提C?/font>
怿通过3????、QMainWindowcL法的学习Q大家应该掌握了创徏菜单栏,工具栏和状态栏的方法。通常的主H口一般也需要这些东西了。但要想让菜单栏Q工h以及状态栏能有自己的动作或行ؓQ还需要其他类的配合用。大家不用急,QMainWindowcȝ单介l完毕之后,会介l这些相关的cd其用方法?/font>
8、void QMainWindow::setWindowModified(bool);
当此函数形式参数为trueӞ卌|了WindowModified属性ؓtrueQ意思ؓ表明先编辑的文有更斎ͼq时QQt会自动更新标题栏QMac OS X pȝ上在ȝ口的关闭按钮上将出现一个变更的样式Q其他系l或q_上会在主H口标题栏的文g名后多显CZ?#8220;*”?/font>
void MainWindow::open() { QDialog *dialog = new QDialog; dialog->setAttribute(Qt::WA_DeleteOnClose); dialog->setWindowTitle(tr("Hello, dialog!")); dialog->show();
void MainWindow::open() { QDialog dialog(this); dialog.setWindowTitle(tr("Hello, dialog!")); dialog.exec(); }
随着信息化的发展Q医疗机构越来越多依赖各U信息化手段来提高运行效率和保障工作质量Q医疗信息化已经遍布在医疗机构的各个环节。这U状늚存在医院不可避免的面临一pd新的问题Qؓ此,国家卫生行政理部门和司法部门相l出C一pd的规章、规定以保障L双方的利益?
本方案根据卫生部《电子病历基本规范》、《医疗事故处理条例》、《电子病历系l功能规范(试行Q》、《医院卫生系l电子认证服务管理办法》、《中华h民共和国电子{法》、《中华h民共和国侉|责Q法》、《最高h民法院关于民事诉D据的若干规定》等法律法规的相兌定,l合医院信息pȝ和业务特点,以国家授时中心徏讑֒保障的第三方可信旉x务ؓ主要技术手D,解决ȝ理信息pȝ中存在的电子{有效性、电子数据(数据甉|Q的真实完整性、生时间权威等问题Q介l了可信旉戛_何帮助医疗机构解军_实施信息化过E中l医疗机构带来的的技术风险;如何在出现医患纠Uhȝ机构能降低D证成本和有效举证Q如何用可信时间戳建立内部责Q认定体系?
可信旉戳的使用是医疗机构的信息化系l能够满_家有x准和法律法规的要求和ȝl构降低q营成本、徏立内部责任认定体pR保障医院的合法权益和降低医院法律风险的必要手段。该Ҏ?010q?1?4日由卫生部组l的《可信时间戳与电子病历法律效力研讨论证会》上获得通过Q医政司、政{法规司、医院管理研I所、卫生部l计信息中心、协和医院、北大h民医院、北M院、北京市西城法院法官、中国医院协会自律维权部、国家法官学院、国家授时中心、联合信L间戳服务中心的有关领导和专家参加了论证?
2 可信旉戳的概念与作?/b>
2.1 可信旉戳释?/b>
可信旉x由权威时间戳服务中心{֏的一个能证明数据甉|Q各U电子文件和电子数据Q在一个时间点是已l存在的、完整的、可验证的,具备法律效力的电子凭证;是解冟뀊中华h民共和国电子{法》中Ҏ据电文原件Ş式要求的必要技术保障。我国权威的旉x务中心(www.tsa.cnQ是由国家法定授时机构(国家授时中心Q和联合信Q共同Q按照有x准和规定q营Q对各行业提供权威可信时间戳服务?
2.2 可信旉戳?/b>
Ҏ国际旉x准《RFC3161》,可信旉x用L电子数据的Hash值封装成可信旉戌求发送到旉x务中心,在此基础上绑定由国家权威旉机构保障、不可更改的旉信息q过旉x务中心签发,产生不可伪造的旉x件。通过电子数据及对应可信时间戳文g有效证明电子数据的完整性及产生旉?
[图一] 可信旉戳生原?/b>
2.3 可信旉x律效?/b>
可信旉戛_ȝ权威W三Ҏ间戳服务中心{֏Q由国家授时中心来负责保障时间的授时和守时监,M机构包括旉戳中心自׃能对旉q行修改以保障时间的权威Q只有这样生的旉xh法律效力。联合信L间戳服务中心是我国目前唯一由国家授时中心进行时间的权威保障的第三方可信旉x务机构,其签发的旉戛_l得C司法的认可,是具有法律效力的可信旉戟?
[图二] 可信旉x务构?/b>
2.4 可信旉戳的基本作用
2.4.1 解决电子{法中Ҏ据电文(电子文gQ满x律法规要求的原g形式的有效手D?/b>
《中华h民共和国电子{法》第二章数据甉|W五条中规定Q“符合下列条件的数据甉|Q视为满x律、法规规定的原g形式要求Q?
Q一Q能够有效地表现所载内容ƈ可供随时调取查用Q?
Q二Q能够可靠地保证自最lŞ成时P内容保持完整、未被更攏V但是,在数据电文上增加背书以及数据交换、储存和昄q程中发生的形式变化不媄响数据电文的完整性。?
如何保证电子数据自最lŞ式生成,内容保持完整、未被更攏V以实现ȝ行ؓ的“重现”,保证ȝ电子数据Q数据电文的“客观性和真实性”。关键在于确保数据电文何时已存在产生Q自形成始内容完整且是可验证的?
Ҏ可信旉戳的基本功能Q可信时间戳W合《中华h民共和国电子{法》第二章关于数据甉|原g形式的要求,能有效证明数据电文(电子文gQ生的旉及内容的完整性,保证数据甉|的客观性、真实性,应用于数据电文长期归、保存、验证、及法律证据举证?
2.4.2 解决电子{的有效?/b>
《中华h民共和国电子{法》中对电子签名的定义为:“电子签名,是指数据甉|中以电子形式所含、所附用于识别签名hw䆾q表明签名h认可其中内容的数据。本法所U数据电文,是指以电子、光学、磁或者类似手D는成、发送、接收或者储存的信息。?
Ҏ已经颁布实施的?/b>国标GB/T25064-2010》规定,电子{格式有如下几U:
l 基本电子{Q?/b>BESQ?/b>
基本电子{方式QBESQ是指包括了{基本数据信息的电子签名?
采用基本电子{方式存在以下问题:
在现时的公钥基础中,采用电子{技术来保{v人的w䆾和验证数据是否篡攏V然而综合众多现实案例中出现的情形,采用基本电子{方式的不之处在于“数字签名的伪造”,׃数字证书有效期ؓ一q_且用户可以随时吊销数字证书Q数字证书失效后Q无法确认电子签名的有效性,基本电子{一般只用在通讯q程中的w䆾认证和防止数据在通讯q程被篡改,电子数据的长期归保存不能用基本签名来实现抗抵赖特性?
l 带时间戳的电子签名(ES-TQ?/b>
Ҏ标准电子{方式Q其在基本电子签名的基础上添加了旉戻I其目的是开始在长时间的有效性上提供一定程度的保证?
当某些验证数据的安全性受到威胁的时候,电子{上的旉戛_保护{的有效性,只要q些安全性威胁是在签名生以后发生的。时间戳可有效证明电子签名是在该安全威胁产生前创建的Q电子{仍可保持其有效性?
l 带归时间戳的电子签?/b>
各种法、密钥、加密数据、加密函数都会随着旉的增加而逐渐降低其安全性,各种证书也会随着旉而纷U失效,如果要长期保存一个电子签名,需要在q些成分的安全性降低前Ҏ个电子签名加盖一ơ时间戳。新加的旉戛_可能使用比老时间戳更强的算法和密钥。这c额外添加的验证数据UCؓ归验证数据?
考虑到时间戳所使用的证书、算法和密钥也会随着旉而失效或降低安全性,在这U情况发生前Q必d盖新的时间戳。因此,一个ES-A可能嵌套了多重时间戳?
lg电子{的几UŞ式上看,电子{证实了签|h的n份。但是,如果文g没有一个准可靠的{v旉Q即佉K有电子签名的文g也有可能不被承认起不到抗抵赖的做用。可信时间戳能ؓ电子{提供实的签|时_保证电子{的有效性,q样既能证实{v人的w䆾Q亦能指出准的{v旉Q人无从抵赖或否认。可信时间戳是电子签名有效性的基本保障?
3 可信旉戛_ȝ卫生信息pȝ中的作用
1、ؓȝ数据甉|Q电子文Ӟ在出现纠Uh能有效D证,降低医院的D证成本,保障医院利益Q规避法律风险;
2、ؓ医院信息pȝ中用电子签名的数据Q提供标准中规定的可信时间戳Qȝ机构的电子签名格式满高U电子签名的要求Q保障医疗机构电子签名在{证书失效后应然有效?
2、ؓȝ信息电子数据Q数据电文)的长期保存、归档提供客观、安全、真实性保障?
4、ؓ医院加强理、徏立内部责任认定体pL供基技术保障;
4 可信旉戛_ȝ卫生信息pȝ中的应用解决Ҏ
4.1 可信旉x术实现构?/b>
可信旉戛_ȝ卫生信息pȝ中的实现构架主要由时间戳中间件应用组件与可信旉x据库存储lgl成Q时间戳服务中心提供W合国际标准的接口程序,ȝ机构几乎不用修改pȝ既可以方侉K|Ԍ具体架构如图Q?
4.2 可信旉x术实现细?/b>
可信旉戳申?/b>
联合信Q旉戳中间g采用异步的方式实现时间戳甌功能Q通过UDP通讯协议方式讉K中间仉讯接口q行h可信旉戳申h作。中间g接收到请求后Q将h数据存储x据库中,q进行应{响应结束此ơ通讯对话Q以保证ȝ工作程的正常进行。封装成旉x准请求包Qƈ按照h的优先发送至联合信Q旉戳中心进行加盖可信时间戳。成功返回可信时间戳后,可信时间戳存储至中间g存储lg中。若发生异常情况Q导致无法完成此ơ时间戳甌操作Q中间g会将此数据请求进行存。由按照规则自动启动的异常处理模块定时扫描的方式Q重新处理此数据h。具体流E如图:
囄h间戳程
囑ּ常处理模块处理失败请求流E?
已加盖时间戳ȝ电子数据查询验证
联合信Q旉戳中间g提供可信旉戳的验证接口Q通过通讯接口的进行交互可以已加盖旉戛_疗电子数据是否被改或查询可信时间戳{旉。验证接口提?U验证成功后的返回数据结果方式:
Ø q回可信旉戳签名时?
Ø q回可信旉x?
Ø q回可信旉戳签名时间和可信旉x?
4.3 可信旉x术实现特?/b>
Ø 高可靠性:旉x务中心采取消息中间g与医院信息系l链接,保障了申h间戳的请求能不丢失,完整q回甌旉戳电子凭证。时间戳服务中心的高可靠和高速签发能力保障了7x24时不间断服务?
Ø 数据安全性:pȝ采用旉戳专用隔ȝ兛_中间件程序,上传到时间戳中心的只是医疗数据的hash|不上传医疗数据内Ҏw,从而保障了ȝ信息数据的安全。针对不能链接外|的ȝ信息pȝQ用时间戳甌专用|闸{进行内外网分离?
Ø 适用性:采用模块化设计技术,便于升和扩展?
Ø 跨^台性:可以在UNIX、LINUX{多U操作系l^Cq行?
Ø负蝲动态均衡技术:Ҏ用户的实际需求,可以实现自动负蝲动态均衡,使得旉戳中间g能够发挥最佳的使用效率?
4.4 可信旉x术实现环?/b>
联合信Q旉戳中间g所需2台硬件企业服务器,以下为硬件环境和软g环境需求:
4.5 出现发生ȝU纷争议时时间戳证据的提?/b>
在发生医疗纠Uh需要对ȝ电子数据q行验证Ӟ需要提取医院加盖时间戳的电子数据原文和旉戛_储服务器上的旉戳电子文Ӟ或时间戳服务中心存储的时间戳Q,由时间戳服务中心或其他第三方鉴定机构按照旉x术标准出具验证报告。证明相x据是否被改和生的旉?
5 Ҏȝ-可信旉x保障ȝpȝ信息化系l法律效力的基础
1、医疗机构需要制定科学有效的使用可信旉戛_电子{的策略,在容易出现纠UL关键数据上合理用,q样既可以解军_患纠Uhȝ机构举证困难、D证成本高的问题,又可以解军_疗机构在实际工作中由于工作需要合理修改诊疗数据给患者带来的疑虑?
2、医疗机构需要长期归保存的各类ȝ数据、医疗记录、媄像资料等Q通过加盖旉戻I保证了医疗信息的旉及内容真实可靠性,解决患者和司法机构对电子病历的改、伪造的质疑Q即使数q以后仍h法律效力Q客观真实反映医疗过E,对界定工作责仅R追I医疗事故v着致关重要的作用?
3、时间戳服务中心由我国唯一法定旉机构负责监控、保持,保证了时间的权威、可靠、不可篡攏V实施时间戳认证后、院Ҏ能力有效的保存经权威旉认证后的ȝ数据Q避免了数据保存在第三方处的存在的数据安全风险?
4、由于医院内部系l时间、电子病历数据、电子签名证书等都完全由医院控制Q在医院内部责Q认定和医患纠UD证时q些电子数据的可信性将受到质疑及否认,Ҏ《中华h民共和国侉|责Q法》、《最高h民法院关于民事诉D据的若干规定》,D医院处于极ؓ不利的境圎ͼ医院利益受到极大损害?
通过采用国家授时中心旉x务中心权威可信时间戳认证Q对ȝ电子数据Q电子病历、各cd疗记录、检查报告、各cd像资料、图片等Q加盖时间戳后进行归保存,有效保障了电子数据的完整性及产生旉的不可否认,真实客观的反映了ȝ行ؓQ符合相x律规章规定,医院h法律效力的医疗数据证据,规避了院方利益受损的巨大风险Q同时增Zpȝ安全性,医院自己能保存医疗信息资料,避免泄露隐患?
It's actually quite simple to implement a quick alpha test. I needed to be able to cookie cut out sprites and fonts so I simply needed to reject fragments where the alpha value was zero. Here are the guts of a shader to do this:
#ifdef GL_ES precision highp float; #endif uniform sampler2D u_tex0; uniform bool u_alphatestenable; varying vec2 v_texCoord; varying vec4 v_color; void main(){ //calculate the fragment color based on the texture and the vertex colour vec4 basecolor = texture2D( u_tex0, v_texCoord ) * v_color; //if testing is enabled, check the alpha component and discard if zero if(u_alphatestenable){ if(basecolor.a == 0.0){ //throw this fragment away discard; } } gl_FragColor = basecolor; }
You need to set up a uniform variable u_alphatestenable which enables the alpha test. If you want to support different test types ( less than, greater than etc) then you will need two more uniform variables: one for the test type and one for the value to test against.
int uni_alphatest_enable = glGetUniformLocation(mProgram, "u_alphatestenable"); bool alphateston = true; glUniform1i(uni_alphatest_enabl
note that you shouldn't call glGetUniformLocation every frame, it should be cached somewhere.
It's quite simple and while you may be thinking oh that is so slow it not that bad. It's faster then the fixed function pipeline which is doing tests for alpha, lights, blend modes etc. If you get paranoid then you can create multiple shaders that support different subsets of features. All you need to be careful of is the cost of calling glSetProgram (to switch shaders) which can be expensive and cause bubbles in the vertex pipeline in the hardware.
在计机囑Ş学领域时常听到gamma correction Qgamma correction 控制了图像整体的亮度Qreproduce colors也需要gamma correction的一些理论知识,gamma correction不仅仅是控制了图像的亮度Q而且q控制了RGB各个分量的比例,我们知道渲染器是U性的Q而显C器qU性,其实电子打在屏幕上从而生亮点,电子的运动受电压控制Q这两者是指数关系的,所以生的亮度也跟电压成指数关p,而发送给昄器的voltages范围?~1Q?/font>
对于我们输入的图像,如果直接昄Q那么就会篇暗,Ҏ已知电压与显CZ度的关系Q进行gamma correction Q其实就是对gamma曲线的修正。一般生产厂家不加说明,他们的伽码值大U等?.5.
代码Q?/p>
gammaCorrection = 1 / gamma colour = GetPixelColour(x, y) newRed = 255 * (Red(colour) / 255) ^ gammaCorrection newGreen = 255 * (Green(colour) / 255) ^ gammaCorrection newBlue = 255 * (Blue(colour) / 255) ^ gammaCorrection PutPixelColour(x, y) = RGB(newRed, newGreen, newBlue)
知道monitor不是一个线性的Q那么我们在q行颜色加法Ӟ我们得到的颜色ƈ不是真正的颜色值的相加Q比如gamma factor?.2
red = add (r1, r2);
red= add (0.235,0.156);
对于一个线性设备,red = 0.391,对于未经修正的montior red=0.126;
因ؓ有一个幂函数的运:C_out = C_in2.2
现在使用gamma correction :C_corrected= C_out1.0/2.2
0.3912.2 = 0.126
0.1261.0/2.2 = 0.39
我们看到使用伽码校正以后我们能得到我们预想的颜色?.39.
There are two ways to do gamma correction:
In OpenGL, using GL_ARB_framebuffer_sRGB is really simple: once your FBO is bound, just enable the sRGB space with
glEnable(GL_FRAMEBUFFER_SRGB);
gamma-correction