我可以在RealBasic中编写屏幕放大镜吗?

时间:2011-11-13 21:40:15

标签: screen-scraping screen pixel realbasic

我想在RealBasic中创建一个屏幕放大镜,但是没有看到用于读取屏幕区域的任何类或API,然后我可以将其渲染到我的窗口。

什么吗?

附带问题:如果我无法读取整个区域,我是否可以至少按像素读取来模拟一个读取光标下像素颜色的滴眼工具?

2 个答案:

答案 0 :(得分:2)

有几种方法可以用Realbasic制作放大镜和吸管器(无耻的插件:我刚才写了eyedropper in RealBasic。)这很简单,只需调用System.Pixel函数使用System.MouseXSystem.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