2011-11-13 2 views
0

RealBasic에서 화면 돋보기를 만들고 싶지만 내 창에 렌더링 할 수있는 화면 영역을 읽는 데 필요한 클래스 나 API가 표시되지 않습니다.RealBasic에서 화면 돋보기를 쓸 수 있습니까?

뭐라 구요?

사이드 질문 : 전체 영역을 읽을 수없는 경우 커서 아래에서 픽셀의 색상을 읽는 eye-dropper 도구를 시뮬레이션하기 위해 적어도 픽셀 단위로 읽을 수 있습니까?

답변

2

는 돋보기와 스포이드 모두 Realbasic와 함께 할 수있는 여러 가지 방법이 있습니다 (뻔뻔한 플러그 :. 내가 얼마 전에 eyedropper in RealBasic을 썼다) 그것은 매우 간단합니다, 바로 사용 System.Pixel 함수를 호출 System.MouseXSystem.MouseY을 매개 변수로 사용합니다. System.Pixel은 지정한 화면 좌표에있는 픽셀의 색에 해당하는 을 반환합니다. 당신이 (명백하게) 그림 개체 또는 캔버스 컨트롤에 그려 큰 규모의 색상을 표시 할 수 있습니다이 색상 정보와

(스포이드로.)

이 방법은 같은 것을 사용할 수 있습니다 돋보기,하지만 아마해서는 안됩니다. RealBasic에서 픽셀 단위로 그리는 작업은 매우 느려질 수 있습니다. 돋보기와 같은 실시간 작업으로 인해 성능 문제와 깜박임이 발생할 수 있습니다.

Windows의 경우 Mac OS X 및 GTK +에서는 화면 영역을 캡처하고 스크린 샷에 유용하며 다양한 표준 알고리즘을 사용하여 비트 맵 이미지를 조작 할 수있는 API 함수가 있습니다.

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 

내가 쓴 동시에 주위 : 여기

는 Windows API를 호출하는 간단한 기능, 화면의 800 × 600 일부를 캡처 3하여 확대하고, 그림 개체로 복사하는 것입니다 스포이드, 나는 또한 기본적인 돋보기 프로젝트를 썼다. here 프로젝트 파일을 다운로드 할 수 있습니다. 위의 기능을 보여주는 것 외에도 Flickering없이 Canvas에 그리는 기본 데모로 사용할 수 있으며 Windows GDI 장치 컨텍스트에서 RealBasic Picture 개체를 사용하고 스레드를 사용하여 주 스레드에서 작업을 오프로드 할 수 있습니다.

+0

정확히 내가 무엇을 찾고 있었습니까. 감사! 이제 또 다른 질문입니다 ... (아직 할 수 없다면 시간 낭비하고 싶지 않기 때문에 아직 데모를 다운로드하지 않았다는 것을 이해하십시오.) Windows를 통해이 작업을 수행하는 방법을 보여 주지만 물론 이것이 이것을 크로스 플랫폼이되기를 바란다. 따라서 RS/RB조차 고려해야한다. "Windows 용으로 컴파일 할 때 'x'를 사용하지만 Mac 용으로 컴파일 할 때는 'Y'를 사용하는 방법을 나타냅니다." Mac 측에 대한 모조 전화로도 예를 업데이트 할 수 있다면 좋을 것입니다! – MarqueIV

+0

사이드 노트에서 ... 이것은 Win32 프로그래밍의 추억을 다시 불러옵니다! :) – MarqueIV

+0

마지막 질문 인 Nev 마음. 코드를 살펴보면서 내가 필요한 것을 발견했습니다. 감사! :) – MarqueIV