我想在RealBasic中创建一个屏幕放大镜,但是没有看到用于读取屏幕区域的任何类或API,然后我可以将其渲染到我的窗口。
什么吗?
附带问题:如果我无法读取整个区域,我是否可以至少按像素读取来模拟一个读取光标下像素颜色的滴眼工具?
答案 0 :(得分:2)
有几种方法可以用Realbasic制作放大镜和吸管器(无耻的插件:我刚才写了eyedropper in RealBasic。)这很简单,只需调用System.Pixel函数使用System.MouseX和System.MouseY作为参数。 System.Pixel 返回与您指定的屏幕坐标处的像素颜色对应的颜色。
使用此颜色信息,您可以(显然)通过绘制到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,我还写了一个基本的放大镜项目。您可以下载项目文件here。除了演示上述功能外,它还可以作为绘制到Canvas而不闪烁的基本演示,使用带有Windows GDI设备上下文的RealBasic Picture对象以及使用线程从主线程卸载工作。
答案 1 :(得分:1)
在这个主题上看一下Real Software论坛上的这个主题。看起来您可以尝试多种解决方案。
http://forums.realsoftware.com/viewtopic.php?f=10&t=7818&hilit=screen+magnifier