ВИРТУАЛЬНАЯ ЛУПА С ФУНКЦИОНАЛЬНЫМИ ВОЗМОЖНОСТЯМИ ОПЕРАТИВНОГО УПРАВЛЕНИЯ
VIRTUAL MAGNIFYING GLASS HAVING REAL-TIME CONTROL FUNCTIONALITIES

Часть раскрытия этого патентного документа содержит материал, который находится под защитой авторского права. Владелец авторского права не возражает против факсимильного воспроизведения любым лицом патентного документа или раскрытия сущности патента в том виде, в котором они представлены в реестре патентов или записях Бюро по патентам и товарным знакам, но в остальном полностью сохраняет все авторские права.
УРОВЕНЬ ТЕХНИКИ
Известны различные типы функциональных возможностей для увеличения и изменения масштаба изображения на экране компьютерного дисплея. В общем случае такие лупы показывают увеличенную копию части изображения, которое появляется на экране компьютера. Такие функциональные возможности были предоставлены в качестве специальных возможностей для пользователей со слабым зрением и в других целях в виде средств, обеспеченных в отдельной прикладной программе, а также в виде специализированного программного обеспечения, предназначенного для предоставления функциональных возможностей увеличения/изменения масштаба изображения, доступных для использования на уровне операционной системы (например, на рабочем столе) и в пользовательских приложениях. Для пользователей со слабым зрением такие средства могут помочь при чтении мелкого текста на экране и/или при различении значков и т.п. Более широко функциональные возможности увеличения и изменения масштаба изображения могут быть полезными в приложениях и на уровне операционной системы (например, на рабочем столе), когда может быть желательно увеличить все или часть объектов или изображений на экране.
Примером пользовательского приложения, обеспечивающего функциональные возможности изменения масштаба изображения, является программа Adobe Acrobat для чтения документов в формате .pdf. В дополнение к выбору уровня изменения масштаба изображения на стандартной инструментальной панели через всплывающее меню имеются три средства выбора отображаемого участка и масштаба изображения: Loupe Tool (инструментальное средство лупы), окно Pan & Zoom (выбора отображаемого участка и масштаба изображения), Dynamic Zoom Tool (инструментальное средство динамического изменения масштаба изображения).
С помощью средства Loupe Tool пользователь управляет уровнем масштаба изображения посредством бегунка и управляет позицией изменения масштаба изображения посредством щелчка мыши в пределах документа. Область с измененным масштабом представлена прямоугольником в документе, который по размеру обратно пропорционален уровню масштаба изображения; изображение с измененным масштабом показывается в отдельном окне. С помощью средства окна Pan & Zoom прямоугольник с изменяемыми размерами может перемещаться по странице документа, представленной в маленьком окне. Изображение документа, предоставленное на заднем плане, изменяет масштаб изображения и выбор отображаемого участка при изменении размера и перемещения прямоугольника. С помощью средства Dynamic Zoom изображение обычного курсора изменяется на изображение маленькой лупы, показывая, что был выполнен вход в режим изменения масштаба изображения. В этом режиме пользователь может щелкнуть мышью по документу и «тянуть» вверх/вниз, чтобы динамически увеличивать и уменьшать масштаб изображения, и может изменять область отображения на боковых краях документа.
В качестве дополнительного примера средства изменения масштаба изображения, предоставляемой в виде части пользовательской прикладной программы, программа Digital Image Pro предлагает набор элементов управления на панели инструментов, предоставляемой как часть окна для управления перемещением по изображениям. Они включают в себя бегунок для изменения уровня масштаба изображения, кнопку возврата к масштабу 100%, окно выбора области отображения и кнопку изменения масштаба изображения в соответствии с выбранной областью. Аналогично средству Pan & Zoom программы Adobe по изображению, представленному в маленьком окне, может перемещаться прямоугольник, размер которого обратно пропорционален выбранному уровню масштаба изображения. На заднем плане предоставляется увеличенное отображение части изображения в прямоугольнике.
Приложения обычно реализуют функциональные возможности изменения масштаба изображения с использованием ввода компьютерной мыши. Например, вращение колесика прокрутки на мыши совместно с нажатием клавиши CTRL на клавиатуре (CTRL + прокрутка) может позволить пользователям увеличивать и уменьшать масштаб изображения из приложений. Каждое приложение имеет свои собственные приращения для изменения масштаба изображения, и изменение масштаба изображения с помощью колесика прокрутки применяет эти приращения. Другие варианты изменения масштаба изображения находятся на панели управления программного обеспечения Microsoft IntelliPoint (для мыши), как показано на Фиг.4 предшествующего уровня техники. На вкладке Buttons (Кнопки) недавно были добавлены команды Zoom In (Увеличить масштаб изображения) и Zoom Out (Уменьшить масштаб изображения) как варианты для каждой кнопки мыши. Некоторые клавиатуры Microsoft имеют элемент управления масштабом изображения (например, "бегунок"), который работает под управлением программного обеспечения IntelliType™ от Microsoft.
По сравнению с программным обеспечением лупы, разработанным для использования на уровне операционной системы (на рабочем столе), при разработке средств увеличения и изменения масштаба изображения для отдельного пользовательского приложения имеется большая гибкость, поскольку приложение может быть "с нуля" построено для соответствия этим средствам. Кроме того, при использовании специфической для приложения лупы взаимодействие лупы с независимо исполняющимися программами и их соответствующими окнами не вызывает проблем. Изменение масштаба изображения легко достигается в приложении. У приложения имеется внутреннее представление информационного содержания, которое должно быть отображено, и если оно спроектировано правильно, оно может отобразить информационное содержание при различных размерах или уровнях масштаба изображения. В программе Word от Microsoft, например, можно увеличивать масштаб изображения вплоть до того, что на экране показывается только несколько строк, при этом текст очень ясно читается, поскольку шрифты основаны на векторной графике (математические описания символов вместо растровых изображений).
Для лупы, которая выполнена общедоступной для использования с рабочим столом и с любыми другими открытыми окнами, то есть на уровне операционной системы (ОС,OS), внутреннее представление, которое приложение может иметь для функциональных возможностей изменения масштаба изображения, является недоступным. Вместо этого увеличение выполняется посредством манипуляции со снимком экрана или выводимым растровым изображением. Хотя обычно это не увеличивает подробности отображения вне соответствующего разрешения экрана, это действительно позволяет пользователям видеть объекты пользовательского интерфейса (UI) и текст с большими размерами. Способ, с помощью которого такая лупа взаимодействует с различными нижележащими элементами экрана и окнами, является очень важным; характер этого взаимодействия, вероятно, оказывает существенное влияние на фактическую и воспринимаемую доступность этого средства.
Пример существующего средства увеличения экрана на уровне операционной системы (OS) представляет собой утилита "Maginfier" ("лупа") операционной системы Microsoft Windows XP. Лупа - это утилита отображения, которая делает экран более читаемым для пользователей, которые имеют слабое зрение. Она создает отдельное окно, которое отображает увеличенную часть экрана, позиция которой определяется позицией курсора указательного устройства, например указателя мыши. Пользователь может изменить уровень увеличения через параметры настройки в панели управления средства. Пользователь может перемещать или изменять размеры окна лупы или перетащить его на край экрана и закрепить его на месте.
Известным специализированным приложением для увеличения экрана является приложение Zoom Magic. После запуска это приложение открывает пользовательское окно для увеличения, как показано на Фиг.1. Размеры окна можно изменять, и окно можно перемещать, как обычное окно. Все инструментальные средства/параметры настройки доступны в строке заголовка. Окно увеличивает изображение, которое расположено непосредственно под ним. Курсор мыши может перемещаться над увеличенным содержимым, но не может взаимодействовать с ним.
Что касается Фиг.1, имеется режим отслеживания курсора, инициализируемый посредством нажатия на кнопки со стрелкой в строке заголовка окна. Нажатие на разные красные стрелки закрепляет окно сверху/снизу/слева/справа. Нажатие в центре отменяет закрепление окна и возвращает его к обычному окну. Этот режим дает возможность накладываться поверх других открытых окон, но не позволяет взаимодействовать с нижележащими окнами приложений в пределах окна увеличения. Отслеживание курсора может быть включено/выключено посредством нажатия на кнопку со стрелкой. Имеется вариант удержания окна увеличения поверх рабочего стола и любых других открытых окон, но в этом режиме увеличенное изображение не обновляется, пока в окне увеличения не щелкают мышью.
Программа "Lens" ("Линза") является инструментальным средством, предлагаемым ABF Magnifying Tools (http://www.abf- soft.com/magnifying-tools.shtml), которое создает имитацию лупы, как показано на Фиг.2 предшествующего уровня техники. Пользователь может изменять положение лупы посредством перетаскивания и использовать ее для выборочного увеличения масштаба изображения областей экрана. Пользователь может откорректировать уровень увеличения, нажимая кнопки "+" и "-". Это инструментальное средство берет статический снимок экрана во время активации. Если на экране что-либо изменяется, это не отражается на изображении с измененным масштабом.
2
Другим примером известного специализированного приложения для специальных возможностей является приложение ZoomText 8.1 от AI (<http://www.aisquared.com/index.htm>). Когда приложение запущено, появляется пользовательский интерфейс (UI) в виде модальной панели управления, как на Фиг.3 предшествующего уровня техники.
Средства лупы/изменения масштаба изображения приложения ZoomText 8.1 имеют несколько режимов.
Полноэкранный режим увеличивает весь экран с некоторым шагом. Когда мышь приближается к краям экрана, автоматически инициируется изменение области отображения.
Режим наложения создает квадратное окно с изменяемым размером в правом нижнем углу экрана. Движение мыши отслеживается в обычном (с масштабом 1:1) отображении, и это движение отражается в увеличенном отображении. Когда мышь приближается к краям экрана, в окне увеличения автоматически инициируется изменение области отображения.
Режим линзы создает плавающее квадратное окно с изменяемым размером, которое перемещается вместе с курсором мыши. Режим линии создает горизонтальную полосу поперек экрана, которая перемещается вверх и вниз вместе с изменениями координаты Y курсора мыши. В окне увеличения происходит динамическое обновление для отражения изменений содержимого экрана во время использования, и через окно увеличения доступно взаимодействие с нижележащими окнами приложений, то есть разрешен ввод от мыши и клавиатуры через лупу в нижележащее окно.
Закрепленный режим создает полосу с изменяемым размером (выделенную черным цветом), расположенную напротив либо верхнего, либо нижнего, либо правого, либо левого края экрана. Движение мыши отслеживается только в изображении с измененным масштабом, в то время как изображение с масштабом 1:1 заблокировано.
Когда включено инструментальное средство Freez It ("заморозить"), оно позволяет пользователю нарисовать на экране прямоугольник с изменяемым размером и блокировать ("заморозить") его позицию. Предопределенное отображение прямоугольника блокирует позицию масштаба изображения в конкретных координатах X и Y. Если информационное содержание изменяется в пределах области, которая увеличена, то это отражается в увеличенном информационном содержании в прямоугольнике. Режим заморозки доступен только в полноэкранном режиме лупы. В полноэкранном режиме нет линзы; увеличивается весь экран, и движение мыши изменяет область отображения в областях "за кадром".
Известные лупы экрана дисплея являются менее чем идеальными с точки зрения их простоты и удобства и интуитивности их использования. Кроме того, способ реализации некоторых луп делает их очень уязвимыми, то есть подверженными сбоям в случае обновлений и исправлений операционной системы/драйверов.
Было бы желательно иметь надежную реализованную с помощью компьютера лупу для экрана дисплея, которая ведет себя больше как настоящая линза оптической лупы с точки зрения того, что она может "плавать над" рабочим столом компьютера и другими открытыми окнами для обеспечения увеличения изображения, находящегося под ней, естественным и интуитивным образом и дает возможность свободного просмотра и взаимодействия с нижележащим рабочим столом/нижележащими окнами.
Реализация приложения для увеличения, предназначенного для использования в операционной системе, которая обеспечивает оконный графический интерфейс пользователя (GUI), например в операционной системе Microsoft Windows, представляет некоторые трудности. Если лупа создана как традиционное окно, окно для увеличения само становится частью рабочего стола, когда оно открыто. В результате системные вызовы для получения изображений рабочего стола для увеличения будут включать в себя само окно лупы (а не часть графического интерфейса пользователя под ним). Использование таких системных вызовов для выполнения увеличения, как в лупе Windows XP, приводит к эффекту бесконечного отражения. С точки зрения пользователя результат получается таким, что ему или ей препятствуют получить увеличенное изображение того, что лежит ниже окна для увеличения.
Многие доступные приложения для увеличения изображения, например ранее упомянутый продукт ZoomText, решают описанную выше трудность с использованием методики, известной как формирование цепочки драйверов. При этом подходе выбранную часть содержимого экрана, сформированного операционной системой, перехватывают и обрабатывают посредством лупы на уровне ядра, прежде чем передать в драйвер экрана. С помощью программного обеспечения для чтения экрана или увеличения изображения экрана поставщики вспомогательных технологий (ATV), по существу, определяют местонахождение драйвера дисплея, получают необходимую для него информацию, затем передают иногда измененные вызовы интерфейса драйвера дисплея (DDI) первоначальному драйверу дисплея. (Некоторое программное обеспечение для дистанционного управления также использует эту методику для перехвата информации, передаваемой на удаленный компьютер.) Методика перехвата DDI называется формированием цепочки драйверов. Драйвер в цепочке перехватывает вызовы DDI от интерфейса графического устройства (GDI) к драйверу дисплея и манипулирует вызовами таким образом, чтобы увеличить изображение части экрана. Что касается операционной системы Windows, вывод наложенной лупы просто находится не в ней, таким образом вызовы к частям копии рабочего стола не будут видеть лупу.
Поскольку формирование цепочки драйверов осуществляет вмешательство в предустановленное взаимоотношение между операционной системой и драйвером, оно может официально не поддерживаться поставщиком операционной системы, например корпорацией Microsoft. В результате методика обычно бывает очень уязвимой и склонной к сбоям, например, если операционная система обновляется с помощью новых пакетов обновлений или драйверов. Дополнительная информация относительно формирования цепочки драйверов и ее применения для луп экрана и других вспомогательных технологических продуктов может быть найдена в сети разработчиков Microsoft (MSDN) по адресу http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnacc/html/atg_driverchain.asp.
Изменение настроек (параметров) для лупы компьютерного дисплея через традиционную панель управления является медленным и неудобным. Было бы очень выгодно, если бы пользователь мог выполнять основные функции управления лупой оперативно, не теряя контекста задачи или без необходимости доступа к панели управления или другого взаимодействия с экранными инструментальными средствами/объектами.
Возможность активировать, деактивировать, позиционировать и корректировать размер и/или уровень увеличения лупы, не убирая фокус ввода из открытых окон, был бы очень выгоден. Параметры настройки лупы могут быть легко изменены, если лупа получает фокус ввода и принимает ввод от мыши/клавиатуры. Однако при этом есть проблема возвращения фокуса ввода интересующему приложению, как только пользователь закончил корректировать параметры настройки. Когда приложение делается активным и возвращается на передний план, оно может находиться не в том же самом состоянии, и фокус ввода клавиатуры может находиться на другом элементе управления.
СУЩНОСТЬ ИЗОБРЕТЕНИЯ
Настоящее изобретение обеспечивает системы на основе программного обеспечения или встроенного программного обеспечения и способы, исполняемые на устройстве обработки данных (например, на компьютере общего или специального назначения), снабженном экраном дисплея и пользовательским устройством ввода данных (например, указательным устройством, таким как компьютерная мышь, шаровой указатель, сенсорная панель или компьютерная клавиатура). Эти системы и способы служат для обеспечения средства, посредством которого пользователь может удобно, выборочно увеличивать части содержимого экранного дисплея. Новые подходы к обеспечению такой лупы экранного дисплея предоставлены для обращения к одному или более недостаткам известных луп, описанных выше.
Лупой в соответствии с изобретением может управлять пользователь для увеличения выбранных частей рабочего стола и окон, открытых на экране. Обеспечена перемещаемая рамка лупы, в пределах которой представлено увеличенное изображение. Увеличенное изображение соответствует содержимому экрана, распложенному в пределах области увеличения, лежащей под рамкой лупы, увеличенному до установленного уровня увеличения.
Лупой в соответствии с изобретением можно оперативно управлять посредством использования устройства пользовательского ввода данных. По меньшей мере, один рабочий параметр лупы может быть отрегулирован без взаимодействия с экранными объектами и не убирая фокус ввода с рабочего стола или из каких-либо открытых окон на экране. В конкретном варианте воплощения изобретения оперативная управляемость лупы включает в себя возможность активировать и деактивировать лупу, регулировать ее уровень увеличения и регулировать размер ее рамки увеличения.
В соответствии с аспектом изобретения лупа экрана дисплея выполнена с возможностью работать посредством усиления ресурсов, доступных через интерфейсы прикладных программ (API) операционной системы, а именно стиль окон и механизм создания составных изображений содержимого экрана со второй стадией, связанный со стилем окон.
В соответствии с аспектом изобретения создается окно лупы, которое является фактически невидимым для вызовов для получения изображения рабочего стола, которое должно быть увеличено. Это позволяет лупе работать интуитивным образом, разрешая наблюдателю видеть то, что расположено непосредственно под лупой, и взаимодействовать с лупой, не убирая фокус ввода из открытых окон приложений и/или с рабочего стола. Вариант воплощения изобретения делает выгодным использование стилей окон, которое доступно через интерфейсы прикладных программ (API) операционных систем Microsoft Windows 2000 и XP. Таким образом, избегают необходимости использования уязвимой методики формирования цепочки драйверов.
Упомянутые выше и другие объекты, признаки и преимущества настоящего изобретения будут очевидны и полностью понятны из последующего подробного описания предпочтительных вариантов воплощения, рассмотренных совместно с приложенными чертежами.
КРАТКОЕ ОПИСАНИЕ ЧЕРТЕЖЕЙ
Фиг.1 - снимок экрана, показывающий экранное окно увеличения продукта лупы предшествующего уровня техники.
Фиг.2 - снимок экрана, показывающий другой продукт лупы предшествующего уровня техники.
Фиг.3 - снимок экрана, показывающий экранное окно инструментальной панели продукта лупы предшествующего уровня техники.
Фиг.4 показывает панель управления, предоставленную как часть программного обеспечения для использования с продуктом компьютерной мыши предшествующего уровня техники настоящего патентообладателя.
Фиг.5 - блок-схема, иллюстрирующая последовательность этапов рабочего процесса, выполняемых посредством варианта воплощения изобретения лупы экрана.
Фиг.6 - снимок экрана, иллюстрирующий перемещаемую и регулируемую рамку увеличения согласно изобретению, в том числе наложенные графические изображения с подсказками, появляющиеся во время режима регулировки лупы.
Фиг.7 - схематическое представление процесса формирования растрового изображения рамки в соответствии с аспектом изобретения.
Фиг.8 - схематическое представление процесса формирования растрового изображения маски в соответствии с аспектом изобретения.
Фиг.9A - схематическое изображение, включающее в себя часть изображения представления, выбранную для увеличения, показывающее взаимоотношение рамки лупы ("прямоугольника окна лупы") и нижележащей области увеличения ("прямоугольника захвата изображения").
Фиг.9B - последовательность изображений, иллюстрирующая стадии процесса изобретения для формирования и представления увеличенного изображения, соответствующего части изображения, показанной на Фиг.9A.
Фиг.10A-10C - схематические изображения, иллюстрирующие процесс, выполненный посредством алгоритма "растяжения" с коэффициентом 1.5x в соответствии с аспектом изобретения.
ПОДРОБНОЕ ОПИСАНИЕ ПРЕДПОЧТИТЕЛЬНЫХ ВАРИАНТОВ ВОПЛОЩЕНИЯ
Экранная лупа в соответствии с изобретением включает в себя перемещаемую рамку лупы, в пределах которой представлено увеличенное изображение. Увеличенное изображение соответствует содержимому экрана, расположенному в пределах области увеличения, лежащей под рамкой лупы, увеличенному до установленного уровня увеличения.
Лупа экрана дисплея в соответствии с вариантом воплощения изобретения выполнена таким образом, что при ее активировании она остается поверх рабочего стола и любых других открытых окон экранного дисплея. Она передает события устройства пользовательского ввода данных (например, мыши или клавиатуры) окнам, лежащим под лупой, и динамически обновляет увеличенное изображение, чтобы отразить изменения в содержимом нижележащего экрана. Такая лупа экрана дисплея может быть воплощена в программном обеспечении или встроенном программном обеспечении, исполняемом на компьютере общего назначения или на другом устройстве обработки данных, снабженном экраном дисплея и устройством пользовательского ввода данных.
Аспект изобретения заключает в себе достижение описанного выше поведения посредством усиления ресурсов, доступных через существующие интерфейсы прикладных программ (API) операционной системы, в частности, стиль окон и механизм создания составных изображений содержимого экрана со второй стадией, связанный с этим стилем окон. Используемый здесь термин "стиль окон" широко охватывает любой набор параметров, определяющих функциональные и/или визуальные характеристики окна, которое должно появиться как часть графического интерфейса пользователя (GUI), в том числе наборы параметров, включенных в один или несколько специализированных стилей окон, определенных в наборе интерфейсов прикладного программирования (API). Этот подход согласно изобретению может использоваться вместо уязвимой методики формирования цепочки драйверов.
В иллюстративном варианте воплощения изобретения лупа содержит окно увеличения, созданное со следующими расширенными стилями окна, которые обеспечены как часть интерфейсов прикладных программ (API) операционных систем Microsoft Windows 2000 и XP для персональных компьютеров:
WS_EX_TRANSPARENT: Этот стиль окон определяет, что окно не будет отрисовываться, пока не будут отрисованы окна под этим окном. Это позволяет взять "копию экрана" под лупой, прежде чем будет нарисована лупа.
WS_EX_LAYERED: Когда этот стиль используется в комбинации со стилем WS_EX_TRANSPARENT, окно лупы не будет принимать пользовательский ввод от мыши или клавиатуры; весь ввод передается приложениям под лупой. Когда окно лупы создается как многоуровневое прозрачное окно, события указательного устройства (например, мыши) будут передаваться другим окнам под многоуровневым окном. Кроме того, этот стиль окон оптимизирует пиксельное наложение полупрозрачного изображения, которое может использоваться для предоставления лупе полупрозрачной рамки. Эта характеристика может использоваться, чтобы дать пользователю визуальный признак, что лупа является "плавающей" над рабочим столом.
WS_EX_NOACTIVATE: Этот стиль окон также делает окно таковым, что оно не принимает "фокус ввода". Таким образом, если окно лупы будет обеспечено как окно, которое обычно становится визуально выделенным (например, обычное окно, снабженное строкой заголовка), то окно не будет становиться визуально выделенным (например, освещенным) как активное окно после щелчка указательным устройством (например, мышью) в его пределах. Пользователь может осуществлять нажатия мыши через лупу. Кроме того, события (ввод) клавиатуры не будут захватываться лупой. Это разрешает пользователю свободно взаимодействовать с окном приложения, расположенным ниже лупы. Кроме того, с этим стилем лупа не появляется на панели задач.
WS_EX_TOOLWINDOW: Добавление этого стиля делает так, что лупа также не обнаруживается в списке открытых окон/приложений, доступном по нажатию клавиш ALT+TAB.
WS_EX_TOPMOST: Этот стиль окон поддерживает лупу как самое верхнее окно. Без него утилита лупы могла бы исчезать позади других окон.
Дополнительная информация об этих и других расширенных стилях окон, включенных в интерфейсы прикладных программ (API) операционных систем Microsoft Windows, может быть найдена в сети разработчиков Microsoft (MSDN), например, по адресу http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/windowing/windows/windowreference/windowfunctions/createwindowex.asp.
Ниже показана иллюстративная функция создания окна лупы, которая может использоваться:
//Создать окно лупы
HWND hwnd =:: CreateWindowEx (
WS_EX_NOACTIVATE | WS_EX_TRANSPARENT | WS_EX_LAYERED | WS_EX_TOPMOST | WS_EX_TOOLWINDOW, wndClass. IpszClassName, L"", WS_POPUP | WS_VISIBLE | WS_DISABLED, 0,0,0,0,
Рабочий процесс лупы в соответствии с аспектом изобретения проиллюстрирован на Фиг.5. Как только окно лупы активировано, устанавливается таймер, с тем чтобы лупа принимала сообщение таймера с предопределенной частотой (например, приблизительно 15-24 раза в секунду). В одном варианте воплощения интервал таймера установлен равным 15 миллисекундам или 67 раз в секунду. Лупа использует сообщение таймера, чтобы постоянно обновлять изображение лупы для отражения изменений в содержимом нижележащего экрана, пока лупа используется (активирована). Частота обновления в обозначенном диапазоне должна позволить увеличенному изображению изменяться относительно гладко, по мере того как рамка увеличения перемещается на экране, или если имеется анимация, проигрываемая в окне ниже ее, таким образом подражая виду настоящей оптической лупы, удерживаемой и перемещаемой перед экраном. Как показано на Фиг.5, когда принято сообщение таймера, захватывается изображение области, которая должна быть увеличена, окно лупы делается самым верхним, и затем область с захваченным изображением отрисовывается (например, "отрисовывается с растяжением") в лупе с надлежащим уровнем увеличения.
Вариант воплощения изобретения выгодно использует тот факт, что модуль USER32 (диспетчер окон системы Win32) реализует относительно простой механизм формирования для выполнения второй стадии создания составных изображений содержимого экрана, когда созданы прозрачные окна. Это является "второй стадией" формирования в том смысле, что она отличается от обычного или нормального процесса формирования рабочего стола и является дополнением к нему. Нормальный процесс формирования, используемый операционными системами Microsoft Windows, следует алгоритму, который иногда называют алгоритмом измененной отрисовки. Окна отрисовываются на рабочем столе в обратном порядке по оси z (сверху вниз). Агрессивное "отсечение" используется для ограничения областей экрана, которые будет перерисованы, теми областями, где добавляется информационное содержание или происходит изменение, чтобы тем самым избегать мерцания экрана и сократить количество фактической работы по отрисовке.
Когда окно использует тени, прозрачность или любой другой эффект, который требует, чтобы система Windows объединила пиксели окна с тем, что находится "позади" него, система Windows создает промежуточные буферы растровых изображений для рабочего стола и прозрачных окон соответственно. Содержимое этих буферов затем "компонуется" для создания конечного вывода. Вызовы для получения копии экрана рабочего стола (например, GetDC(NULL)) и копирования растрового изображения с растяжением (StretchBlt) рабочего стола будут использовать буфер рабочего стола, а не рабочий стол, получающийся в результате процесса создания составного изображения со второй стадией. Делая себя "прозрачным" окном операционной системы Windows (даже если его непрозрачность установлена равной 100%), окно увеличения одновременно активизирует процесс создания составного изображения со второй стадией и помещает себя над основным рабочим столом. Использование стиля окон "самое верхнее окно" сохранит лупу на самом верху, предотвращая последующее появление нового окна и его установку в качестве самого верхнего.
Лупа в соответствии с изобретением представляет рамку увеличения с изменяемым размером, которая может перемещаться на экране дисплея и в пределах которой представлено увеличенное изображение, соответствующее содержимому экрана, расположенному в области увеличения, лежащей под рамкой увеличения. В описанном здесь основном варианте воплощения рамка увеличения/линза «прикреплена» к курсору указательного устройства и выровнена по его центру, чтобы двигаться вместе с ним. В других вариантах воплощения рамка увеличения (которая ограничивает виртуальную "линзу" лупы) может быть сделана перемещаемой независимо от курсора указательного устройства.
Лупа компьютерного дисплея в соответствии с аспектом изобретения "плавает" над рабочим столом и любыми открытыми окнами и не убирает фокус ввода с рабочего стола или из любого открытого окна. Как ранее описано, это - желательные характеристики. Однако они представляют проблему, каким образом изменять размеры лупы и ее уровень увеличения. Для нормальных окон приложений это было бы тривиально; изменение размеров достигалось бы посредством перетаскивания границы окна, а уровень усиления мог бы изменяться с помощью экранных элементов управления. Однако использование таких способов приводит к тому, что фокус ввода убирается из других открытых окон, что может иметь непреднамеренные и нежелательные последствия. Параметры настройки также могут быть изменены через страницу панели управления, но этот подход является громоздким и отнимающим много времени, особенно для пользователя, которому может быть нужна частая непостоянная помощь лупы во время выполнения различных задач на компьютере.
В соответствии с аспектом изобретения обеспечена лупа, которая может включаться и выключаться пользователем, по-существу, моментально посредством нажатия на заданную кнопку увеличения, предусмотренную на устройстве пользовательского ввода данных (например, на компьютерной мыши или клавиатуре). Переключатель лупы может являться специализированной кнопкой (или приводимым в действие пользователем переключателем другого типа) или кнопкой, назначенной пользователем для средства увеличения.
В иллюстративном варианте воплощения, когда лупа отображается на экране, пользователь может удерживать кнопку увеличения в течение предопределенного короткого промежутка времени (например, приблизительно полсекунды), чтобы войти в режим регулировки. Чтобы сообщить пользователю, что является активным режим регулировки, в области увеличительной линзы, ограниченной рамкой увеличения, может появиться (например, посредством постепенного перехода) графическое изображение, как показано на Фиг.6. Находясь в режиме регулировки, пользователь может изменить увеличение и размер линзы. Как изображено на Фиг.6, графическое изображение, которое появляется на экране, может обеспечить визуальную индикацию относительно подходящих действий пользовательского ввода (например, движения мыши и вращение колеса прокрутки) для того, чтобы произвести регулировку лупы. Однако пользователь не взаимодействует с этим графическим изображением, чтобы произвести регулировку. Ниже изложена иллюстративная схема для изменения размера увеличительной линзы/рамки.
При активированной лупе изменения размера ширины рамки лупы могут быть вызваны следующим способом. Если пользователь нажимает и удерживает кнопку мыши, назначенную для функции увеличения, и перемещает мышь на предопределенное расстояние в предопределенном направлении (например, 50 пикселей вправо), рамка лупы может быть увеличена в размере (например, с одной или с обеих из своих правой и левой сторон) со скоростью, соответствующей движению мыши в этом направлении. Если пользователь нажимает и удерживает назначенную кнопку мыши и перемещает мышь на предопределенное расстояние во втором предопределенном направлении (например, 50 пикселей влево), рамка лупы может быть уменьшена в размере (например, с одной или с обеих из правой и левой сторон) со скоростью, соответствующей движению мыши в этом направлении.
При активированной лупе изменения размера высоты рамки лупы могут быть вызваны аналогично. Если пользователь нажимает и удерживает назначенную кнопку мыши и перемещает мышь на предопределенное расстояние в третьем предопределенном направлении (например, 50 пикселей вниз), рамка лупы начнет увеличиваться в размере (например, с одной или с обеих из своих нижней и верхней сторон) со скоростью, соответствующей движению мыши. Если пользователь нажимает и удерживает назначенную кнопку и перемещает мышь на предопределенное расстояние в четвертом предопределенном направлении (например, 50 пикселей вверх), то рамка лупы начнет уменьшаться в размере (например, с одной или с обеих из своих нижней и верхней сторон) со скоростью, соответствующей движению мыши.
Вертикальные и горизонтальные изменения размера рамки лупы могут быть произведены одновременно посредством объединения описанных выше движений мыши. Параметры настройки размера лупы могут быть сохранены, с тем чтобы при следующем запуске лупы рамка/линза лупы были того же размера, который она имела перед последним закрытием.
При активированной лупе уровень увеличения может быть изменен следующим образом. Если пользователь нажимает назначенную кнопку мыши и затем при удерживаемой кнопке прокручивает колесико мыши на себя, уровень увеличения уменьшится до любого предельного значения, установленного в качестве минимального уровня увеличения (например, масштаб увеличения 1:1). Если пользователь нажимает назначенную кнопку мыши и затем при удерживаемой кнопке прокручивает колесико мыши от себя, уровень увеличения увеличится (до любого предельного значения, установленного в качестве максимального уровня увеличения). В иллюстративном варианте воплощения уровень увеличения лупы регулируется с шагом приращения для следующих уровней: 1.5x, 2x, 3x, 4x и 5x.
При деактивированной (выключенной) лупе нажатие и отпускание назначенной кнопки мыши заставит лупу активироваться и появиться на экране. Последующее моментальное нажатие кнопки немедленно деактивирует лупу. Если при деактивированной лупе пользователь нажимает назначенную кнопку и затем при удерживаемой кнопке прокручивает колесико мыши на себя или от себя, события прокрутки будут направлены к приложению, которое имеет фокус ввода. Когда пользователь отпускает кнопку увеличения, лупа будет активирована и появится на экране.
Иллюстративная лупа в соответствии с изобретением реализована с использованием расширенных стилей окон, доступных как часть интерфейсов прикладного программирования (API), обеспеченных операционными системами Microsoft Windows 2000 и XP. В частности, лупа может быть выполнена как отдельное многослойное (WS_EX_LAYERED), прозрачное (WS_EX_TRANSPARENT) окно, которое периодически захватывает часть экранного изображения, растягивает его и обновляет изображение своего окна. Эти конкретные атрибуты окна позволяют окну "плавать" над рабочим столом и любыми открытыми окнами приложений. С таким набором установленных флагов стиля лупа никогда не принимает фокус ввода. Вместо этого используются программные "ловушки" для выборочного получения пользовательского ввода от мыши, которая используется для регулировки лупы, не прерывая текущие пользовательские задачи и процессы приложений.
В описанном выше основном варианте воплощения компьютерная мышь используется для обеспечения кнопки ввода, которая используется вместе с движением мыши и колесика прокрутки, чтобы производить регулировку лупы. Однако понятно, что для обеспечения оперативной управляемости лупы могут использоваться различные другие известные устройства пользовательского ввода данных, в том числе устройства шарового указателя, компьютерные клавиатуры, сенсорные панели и джойстики.
В соответствии с иллюстративным вариантом воплощения изобретения, когда кнопка увеличения удерживается достаточно долго, чтобы войти в режим регулировки, устанавливается ловушка событий мыши. Ловушка событий мыши "перехватывает" сформированный мышью ввод и переадресовывает его окну лупы, которое обычным образом не принимает ввода. Ввод мыши (информация о движении мыши и о вращении колесика прокрутки) используется для регулировки параметров настройки. Любое нижележащее приложение, находящееся "в фокусе", не принимает уведомления о движениях мыши или колесика прокрутки, пока установлена ловушка событий мыши. Ловушка событий отключается, как только осуществлен выход из режима регулировки, который происходит после отпускания кнопки, с тем чтобы приложение, находящееся в фокусе, могло снова принимать ввод мыши. Приложение, находящееся в фокусе, никогда не теряет фокус, таким образом нет никаких непреднамеренных побочных эффектов. В описанной иллюстративной лупе параметры настройки хранятся как три значения системного реестра: уровень увеличения; ширина лупы в пикселях; и высота лупы в пикселях.
Информация относительно "ловушек событий", используемых в операционных системах Microsoft's Windows™, может быть найдена в сети разработчиков Microsoft (MSDN), например, по адресу: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnwui/html/msdn_hooks32.asp.
См. также
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/windowing/hooks.asp.
Программное обеспечение, подходящее для реализации иллюстративного варианта воплощения лупы изобретения, может быть описано в терминах двух первичных классов: класса MagnifierWindow, который реализует оконную процедуру, создание, таймер обновления и разрушение; и класса MagnifierRenderer, который реализует захват экранного изображения и визуализацию окна.
Класс MagnifierWindow создает окно со стилями WS_EX_LAYERED и WS_EX_TRANSPARENT (в числе других стилей). При запуске он определяет начальный размер лупы и уровень увеличения и инициализирует объект MagnifierRenderer. Также он создает объект таймера, и на каждом такте таймера вызывает метод Update(...) объекта MagnifierRenderer, чтобы обновить изображение и позицию лупы на экране. Окно лупы закрывается, когда пользователь нажимает на кнопку мыши для увеличения во второй раз, и сохраняет уровень увеличения и размер. Дескриптор HWND, связанный с объектом MagnifierWindow, освобождается, когда принято сообщение WM_CLOSE. Сообщение WM_QUIT посылается в обработчик сообщений потока, когда окно разрушается. Класс MagniferWindow может быть снабжен ранее описанным режимом регулировки лупы, вход в который осуществляется посредством нажатия и удержания назначенной кнопки мыши лупы. Далее представлен иллюстративный список составляющих методов и обработчиков сообщения, которые могут быть включены в класс MagnifierWindow:
Конструктор: Регистрирует оконный класс MagnifierWindow и создает его экземпляр; загружает динамическую библиотеку ловушки сообщений мыши;
Деструктор: Проверяет, освобожден ли дескриптор HWND, связанный с экземпляром класса MagnifierWindow; отключает ловушку событий мыши;
GetHWND: Возвращает дескриптор HWND, связанный с этим экземпляром класса MagnifierWindow (клиенты могут отправить сообщение WM_CLOSE этому окну, чтобы закрыть лупу);
WM_CREATE: Определяет наилучший размер лупы (процент от разрешения экрана активации или из установок системного реестра) и уровень увеличения (значение по умолчанию 1.5x или установки системного реестра). Инициализирует объект magnifierRenderer и создает таймер окна для обновления;
WM_CLOSE: Разрушает таймер обновления, сохраняет настройки в системном реестре, вызывает DestroyWindow;
WM_DESTROY. Посылает сообщение WM_QUIT в обработчик сообщений потока;
WM_NCDESTROY: Деинициализирует переменные компонентов класса;
WM_TIMER: Если выполняется хранитель экрана, закрывает лупу; обновляет анимацию отображения на экране (OSD; графическое изображение, которое появляется, когда регулируются размер и уровень увеличения), если она активна; получает текущую позицию указателя мыши и вызывает метод MagnifierRenderer::Update(...), чтобы обновить изображение лупы и позицию;
WM_DISPLAYCHANGE: Обновляет размеры лупы, когда изменяются размеры экрана;
WM_ERASEBKGND: Нет действий. Когда принято это сообщение, управление немедленно возвращается системе Windows в качестве оптимизации.
WM_MOUSEWHEEL: Это сообщение принимается только от ловушки сообщений мыши (когда она активна); изменяет уровень увеличения;
WM_MOUSEMOVE: Это сообщение принимается только от ловушки сообщений мыши (когда она активна); изменяет размер окна (рамки) лупы;
OnMagnifierButtonDown: Осуществляет вход в режим изменения размеров; включает ловушку событий мыши; инициализирует постепенный показ отображения на экране (OSD);
OnMagnifierButtonUp: Осуществляет выход из режима изменения размеров; выключает ловушку событий мыши, инициализирует постепенное гашение отображения на экране (OSD); если увеличение или размер не были изменены, осуществляет выход из лупы;
SetBestWindowSize: При заданных желаемых ширине и высоте устанавливает размеры окна лупы для наилучшего размещения; каждый край окна изменяется с приращением, в 2 раза большим текущего увеличения (то есть при увеличении в 1,5 раза ширина окна изменена с приращением 6 пикселей), чтобы предотвратить дрожание изображения при увеличении и уменьшении; и
MouseHook: обратный вызов ловушки событий мыши; пересылает сообщения колесика мыши и перемещения мыши окну лупы. Ловушка событий мыши используется, чтобы воспрепятствовать приему ввода мыши нижележащими приложениями при изменении размера и увеличения лупы.
MagnifierRenderer
Класс MagnifierRenderer выполняет операции захвата изображения экрана и визуализации увеличения. Он связан с дескриптором окна и ему задается уровень увеличения. Далее следует иллюстративный список составляющих методов, которые могут быть включены в класс MagnifierRenderer:
Конструктор: инициализация по умолчанию;
AttachWindow: Связывает объект MagnifierRenderer с дескриптором окна. Ширина и высота лупы равны ширине и высоте указанного окна во время вызова. В это время формируются изображения, представляющие рамку лупы и маску линзы. Их ширина и высота соответствуют ширине и высоте заданного окна. Эти два изображения сохраняются для быстрого формирования при визуализации. Этот метод может вызываться повторно, чтобы заставить объект MagnifierRenderer изменить свои размеры на основе размеров окна;
SetMagnification: Устанавливает уровень увеличения. Этот метод может быть вызван в любое время для изменения уровня увеличения;
GetMagnification: Возвращает текущий уровень увеличения;
SetOSDAlpha: Устанавливает непрозрачность графического изображения для отображения на экране в режиме регулировки, которое указывает подходящий пользовательский ввод для регулировки лупы;
GetOSDAlpha: Возвращает непрозрачность графического изображения для отображения на экране в режиме регулировки;
Update: Перемещает и обновляет лупу. Если размер окна изменился, создает новые растровые изображения рамки и маски линзы. Если захваченное растровое изображение не изменяется, обновление не происходит, экономя многие циклы обновления изображения.
Capture: Предусмотрены два буфера захвата изображения - текущий и предыдущий; осуществляется захват изображения в новом текущем буфере, и возвращается сообщение, которое указывает, отличаются ли текущий и предыдущий буферы;
Render: Растягивает текущее захваченное изображение, маскирует нежелательные пиксели, копирует рамку сверху;
CreateFrameAndMask: Создает маску линзы, рамку, текущее захваченное растровое изображение и предыдущее захваченное растровое изображение, размеры которых установлены относительно текущей ширины и высоты окна;
GetBitmapSize: Возвращает ширину и высоту растрового изображения в структуре SIZE;
GenerateBorder: Принимает девять компонентных растровых изображений и заполняет ими результирующее растровое изображение;
MaskBitmap: Маскирует пиксели в результирующем растровом изображении с использованием растрового изображения маски - результирующие пиксели умножаются на значения альфа-канала маски;
AreBitmapsDifferent: Возвращает значение, указывающее, различны ли два растровых изображения, посредством сравнения значений пикселей для определения, изменилась ли область захвата изображения; если область захвата изображения не изменилась, лупа не нуждается в обновлении в качестве оптимизации;
Stretch_1x5: Растягивает растровое изображение с коэффициентом 1,5.
Иллюстративные процессы и функциональные возможности класса MagnifierRenderer описаны ниже со ссылкой на Фиг.7-10.
Инициализация
Со ссылками на Фиг.7, метод AttachWindow(...) сохраняет указанный описатель окна и создает изображения для рамки и маски линзы. Изображения рамки и маски линзы соответствуют ширине и высоте окна. Рамка составлена из девяти отдельных элементов. Средние элементы растягиваются, чтобы образовать рамку необходимого размера. Следует обратить внимание, что затененные области в этих изображениях представляют прозрачные пиксели.
Со ссылками на Фиг.8, после создания изображения рамки таким же образом создается изображение маски линзы. Непрозрачные пиксели в маске, представленные незатененной областью, определяют область, в которой появится растянутое изображение. Следует обратить внимание, что затененные области в этих изображениях представляют прозрачные пиксели.
Метод MagnifierRenderer::Update(...) проверяет, изменились ли размеры окна владельца, и если изменились, обновляет изображения рамки и маски линзы для соответствия новому размеру. Клиенты могут вызвать метод AttachWindow(...), чтобы явно заставить повторно создать изображения рамки и маски линзы.
Захват изображения
Со ссылками на Фиг.9A, исходный прямоугольник захвата изображения выровнен по центру в текущей позиции указателя мыши. Ширина иллюстрированного прямоугольника захвата изображения (который определяет область увеличения) является шириной прямоугольника окна лупы (рамки лупы), разделенной на уровень увеличения. Аналогично, высота прямоугольника захвата изображения является высотой прямоугольника окна MagnifierWindow, разделенной на уровень увеличения. Метод Capture копирует экранное изображение и возвращает результат, который указывает, отличается ли захваченное изображение от ранее захваченного изображения. Захваченное изображение сохраняется для при визуализации.
Визуализация
Как показано на Фиг.9B, сначала захваченное изображение растягивается до размеров окна. Затем растянутое изображение маскируется с помощью маски линзы. Затем на растянутое изображение накладывается рамка. После входа в режим регулировки графические изображения подсказки для регулировки увеличения и изменения размеров рамки (предпочтительно прозрачные - графические изображения представляют прозрачные пиксели) добавляются к созданному изображению. Графические изображения подсказки появляются только при активном режиме регулировки.
Обновление
Если изображение и позиция лупы изменились, то осуществляется вызов метода::UpdateLayeredWindow(изображение и позиция). Если изменилась только позиция, осуществляется вызов метода::UpdateLayeredWindow(позиция). Если изменилось только изображение, осуществляется вызов метода::UpdateLayeredWindow(изображение). Окно устанавливается самым верхним в функции Update().
Алгоритм растяжения с коэффициентом 1,5x
Стандартный интерфейс прикладного программирования (API) системы Windows может использоваться для растяжения растровых изображений до рамки лупы с разными уровнями усиления. В одном варианте воплощения изобретения уровень усиления 1.5x по умолчанию использует другой алгоритм для оптимизации скорости и улучшения вида увеличенного изображения.
Как показано на Фиг.10A, при растяжении с коэффициентом 1,5 два исходных пикселя становятся тремя результирующими пикселями. Первый исходный пиксель копируют в первый результирующий пиксель. Второй исходный пиксель копируют в третий результирующий пиксель, второй результирующий пиксель устанавливается как среднее значение первых двух исходных пикселей.
Алгоритм растяжения, используемый лупой, растягивает исходные строки 0, 1, 2, 3, 4,... в результирующие строки 0, 2, 3, 5, 6,... соответственно, как показано на Фиг.10B. Затем алгоритм возвращается назад и заполняет строки 1, 4, 7 и т.д. посредством усреднения пикселей из строки выше и ниже результирующего пикселя, как изображено на Фиг.10C.
Настоящее изобретение было описано с точки зрения его предпочтительных и иллюстративных вариантов воплощения. Многочисленные другие варианты воплощения, модификации и изменения в пределах объема и сущности приложенной формулы изобретения придут в голову специалистам в области техники на основе обзора этого раскрытия. В формуле изобретения любое использование меток для переменных алгоритма, появляющихся в спецификации, предназначено для удобства и ясности и не подразумевает какого-либо ограничивающего эффекта.