PureBasic - форум

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » PureBasic - форум » Вопросы по PureBasic » Как узнать цвет пикселя на экране используя PureBasic?


Как узнать цвет пикселя на экране используя PureBasic?

Сообщений 1 страница 7 из 7

1

Предполагаю, что нужно сделать скриншот в память, а от туда уже цвет брать по координатам, правда самой реализации вообще не представляю.

0

2

Программа CatchColor. http://purebasic.info/OpenSource/index.php

0

3

Спасибо, выдернул из CatchColor

Мне вот нужно получить цвет пикселей из такого вот квадратика

Код:
*DC=GetDC_(GetCapture_())

For x=1 To 100
For y=1 To 100
color=GetPixel_(*DC, x, y)
Next y
Next x

Простите, а побыстрей как-нибудь можно? 4 минуты очень долго.
На AutoIt есть библиотека она тоже самое делает за 0.3 секунды, но как ее прикрутить к PureBasic я не понял, тут нужны специалисты в обоих языках.

0

4

Надо не в цикле обращаться к каждому пискелю экрана и брать его цвет, а делать скриншот нужной области экрана и уже в памяти работать с ним, т.е. проходить его попиксельно.

0

5

Paranoia написал(а):

Надо не в цикле обращаться к каждому пискелю экрана и брать его цвет, а делать скриншот нужной области экрана и уже в памяти работать с ним, т.е. проходить его попиксельно.

Спасибо, Добрый человек, ты наверное заметил, что я прямо с этого и начал свое первое сообщение в этой теме. Принцип, как ты понял, я понимаю, а с реализацией хотелось, чтобы мне помогли.

0

6

QQruza написал(а):

На AutoIt есть библиотека она тоже самое делает за 0.3 секунды

Медленно.
PureBasic тратит на это (снятие скрина с экрана и попиксельный разбор) меньше миллисекунды (меньше тысячной доли секунды).

Код:
DisableDebugger

Procedure MakeDesktopScreenshot(ImageNr,x,y,Width,Height)
  Protected hImage, hDC, hWnd, DeskDC
  
  hImage = CreateImage(ImageNr,Width,Height) 
  If hImage
    hDC    = StartDrawing(ImageOutput(ImageNr))
    If hDC
      hWnd=GetDesktopWindow_()
      DeskDC = GetDC_(hWnd) 
      BitBlt_(hDC,0,0,Width,Height,DeskDC,x,y,#SRCCOPY) 
      StopDrawing() 
      ReleaseDC_(hWnd,DeskDC) 
    Else
      FreeImage(ImageNr)
      hImage = 0
    EndIf
  EndIf
  
  ProcedureReturn hImage
EndProcedure

t = ElapsedMilliseconds()

; Сделали скрин части экрана
If MakeDesktopScreenshot(0,20,50,100,100)
  
  If StartDrawing(ImageOutput(0))
    For x=0 To 99
      For y=0 To 99
        color=Point(x, y)
      Next y
    Next x
    
    StopDrawing()
  EndIf
  
EndIf

r = ElapsedMilliseconds()-t

MessageRequester("", "Выполнено за "+StrF(r/1000, 3)+" секунды")

0

7

как получить цвет формы, гаджета и т.д.? Вот находил один код но он крыво работает, если даже работает.

Код:
Define FolderIcon
Define Draw
Procedure GetWindowBkColor(hWnd)
  A$=Space(40)
  GetObject_(GetClassLong_(hWnd,#GCL_HBRBACKGROUND),40,@A$)
  ProcedureReturn PeekL(@A$+4)
EndProcedure

ExtractIconEx_("shell32.dll",130,0,@FolderIcon, 1)

CreateImage(1,32,32)
Draw = StartDrawing(ImageOutput(1))
  Box(0,0,32,32,0)
  DrawIcon_(Draw,0,0,FolderIcon)
StopDrawing()

If OpenWindow(0,0,0,500,250,"Window",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  SetWindowColor(0,$353535)
  ImageGadget(1,10,10,0,0,ImageID(1),0)
  Debug Hex(GetWindowBkColor(WindowID(0)))
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf

Отредактировано mestnyi (05.10.2013 13:39:17)

0


Вы здесь » PureBasic - форум » Вопросы по PureBasic » Как узнать цвет пикселя на экране используя PureBasic?