Есть несколько способов, как с помощью Realbasic можно сделать как лупу, так и пипетку (бесстыдный плагин: я недавно написал пипетку в RealBasic ). Это очень просто, просто назовите 1003 * Функция System.Pixel с использованием System.MouseX и System.MouseY в качестве параметров. System.Pixel возвращает Color , соответствующий цвету пикселя в указанных вами координатах экрана.
С помощью этой информации о цвете вы можете (очевидно) показать цвет в большем масштабе, рисуя объект Picture или элемент управления Canvas (как с помощью пипетки).
Этот метод может использоваться для чего-то вроде лупы, но, вероятно, не должно быть. Рисование попиксельно в RealBasic может быть довольно медленным, что при выполнении задач в реальном времени, таких как лупа, может привести к проблемам с производительностью и мерцанию.
В Windows, а также, вероятно, в Mac OS X и GTK +, есть функции API, которые позволяют захватывать область экрана, которая полезна для снимков экрана, и для управления растровыми изображениями с использованием ряда стандартных алгоритмов.
Вот простая функция, которая вызывает Windows API для захвата части экрана размером 800x600, увеличения ее на 3 и копирования в объект Picture:
Function GetZoomedPic() As Picture
Declare Function GetDesktopWindow Lib "User32" () As Integer
Declare Function GetDC Lib "User32" (HWND As Integer) As Integer
Declare Function StretchBlt Lib "GDI32" (destDC As Integer, destX As Integer, destY As Integer, destWidth As Integer, destHeight As Integer, _
sourceDC As Integer, sourceX As Integer, sourceY As Integer, sourceWidth As Integer, sourceHeight As Integer, rasterOp As Integer) As Boolean
Declare Function ReleaseDC Lib "User32" (HWND As Integer, DC As Integer) As Integer
Const CAPTUREBLT = &h40000000
Const SRCCOPY = &HCC0020
Dim coordx, coordy As Integer
Dim magnifyLvl As Integer = 3
Dim screenCap As New Picture(800, 600, 32)
coordx = System.MouseX - (screenCap.Width \ (magnifyLvl * 2))
coordy = System.Mousey - (screenCap.Height \ (magnifyLvl * 2))
Dim rectWidth, rectHeight As Integer
rectWidth = screenCap.Width \ magnifyLvl
rectHeight = screenCap.Height \ magnifyLvl
Dim deskHWND As Integer = GetDesktopWindow()
Dim deskHDC As Integer = GetDC(deskHWND)
Call StretchBlt(screenCap.Graphics.Handle(1), 0, 0, screenCap.Width, screenCap.Height, DeskHDC, coordx, coordy, rectWidth, _
rectHeight, SRCCOPY Or CAPTUREBLT)
Call ReleaseDC(DeskHWND, deskHDC)
Return screenCap
End Function
Примерно в то же время я написал Eyedropper, я также написал базовый проект лупы. Вы можете скачать файл проекта здесь . Помимо демонстрации вышеуказанной функции, она также может служить основной демонстрацией рисования на холсте без мерцания, использования объекта RealBasic Picture с контекстами устройства Windows GDI и использования потоков для выгрузки работы из основного потока.