Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 | 2 |

 

  Вопрос: определение цвета экрана в указанной точке Добавлено: 06.07.11 20:49  

Автор вопроса:  Алексей | ICQ: нету 
Доброго времени суток!
Мне необходимо определить цвет экрана монитора в точке (12, 89), получить его в RGB и вывести в текст бокс 1 на VB.Net 2008. Как это сделать???

Ответить

  Ответы Всего ответов: 23  

Номер ответа: 1
Автор ответа:
 AgentFire



ICQ: 192496851 

Вопросов: 75
Ответов: 3178
 Профиль | | #1 Добавлено: 06.07.11 21:59
graphics.copyfromscreen

Ответить

Номер ответа: 2
Автор ответа:
 Алексей



ICQ: нету 

Вопросов: 6
Ответов: 42
 Профиль | | #2 Добавлено: 07.07.11 09:15
Можно подробнее?

Ответить

Номер ответа: 3
Автор ответа:
 Дмитрий Юпатов



Вопросов: 4
Ответов: 457
 Web-сайт: cargomaster.at.ua/
 Профиль | | #3
Добавлено: 07.07.11 09:52
  1. ' использование функции
  2. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  3.         Dim sp As Point = New Point(12, 89)
  4.         Dim clr As Color = Me.getpixelcolorfromscreen(sp)
  5.         MsgBox(clr.ToString)
  6.         Me.BackColor = clr
  7.     End Sub
  8. ' сама функция
  9.     Private Function getpixelcolorfromscreen(ByVal p As Point) As Color
  10.         Dim bmp As Bitmap = New Bitmap(1, 1, Drawing.Imaging.PixelFormat.Format32bppArgb)
  11.         Dim g As Graphics = Graphics.FromImage(bmp)
  12.         g.CopyFromScreen(p, New Point(0, 0), bmp.Size)
  13.         Return bmp.GetPixel(0, 0)
  14.     End Function

Ответить

Номер ответа: 4
Автор ответа:
 AgentFire



ICQ: 192496851 

Вопросов: 75
Ответов: 3178
 Профиль | | #4 Добавлено: 07.07.11 09:54
поподробнее расскажет msdn, так как умеет он, все равно никто не умеет

Ответить

Номер ответа: 5
Автор ответа:
 Алексей



ICQ: нету 

Вопросов: 6
Ответов: 42
 Профиль | | #5 Добавлено: 07.07.11 14:38
я извиняюсь, но.. подстроил под свою программу, получил следущий кусок кода:
  1.  
  2.  Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  3.         Timer1.Start()
  4.     End Sub
  5.     Private Function getpixelcolorfromscreen(ByVal p As Point) As Color
  6.         Dim bmp As Bitmap = New Bitmap(1, 1, Drawing.Imaging.PixelFormat.Format32bppRgb)
  7.         Dim g As Graphics = Graphics.FromImage(bmp)
  8.         g.CopyFromScreen(p, New Point(0, 0), bmp.Size)
  9.         Return bmp.GetPixel(0, 0)
  10.     End Function
  11.     Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
  12. p1:
  13.         Dim x As Integer
  14.         Dim y As Integer
  15.         y = Cursor.Position.Y()
  16.         For x = 300 To 800 Step 1
  17.             Dim sp As Point = New Point(x, y)
  18.             Dim clr As Color = Me.getpixelcolorfromscreen(sp)
  19.             TextBox1.Text = clr.ToString
  20.         Next
  21.         GoTo p1
  22.     End Sub


Он не работет, высвечивается ошибка на
g.CopyFromScreen(p, New Point(0, 0), bmp.Size)
с подпиской"недопустимый параметр"

Ответить

Номер ответа: 6
Автор ответа:
 Дмитрий Юпатов



Вопросов: 4
Ответов: 457
 Web-сайт: cargomaster.at.ua/
 Профиль | | #6
Добавлено: 07.07.11 17:12
работает, но подвешивает приложение. У тебя ж таймер работает непрерывно. Соответственно он постоянно пытается передать текст в текстбокс на форме, отчего форма висит. А про недопустимый параметр ничего не пишет. код скопипастил и ничего не менял. На форму кинул кнопку, текстбокс и таймер. Потом добавил твой код в модуль формы и нажал F5

Ответить

Номер ответа: 7
Автор ответа:
 Дмитрий Юпатов



Вопросов: 4
Ответов: 457
 Web-сайт: cargomaster.at.ua/
 Профиль | | #7
Добавлено: 07.07.11 17:13
лучше опиши поподробнее, что тебе надо и там посмотрим

Ответить

Номер ответа: 8
Автор ответа:
 Алексей



ICQ: нету 

Вопросов: 6
Ответов: 42
 Профиль | | #8 Добавлено: 08.07.11 15:51
а то и надо: непрерывное определение цвета пикселя по координатам х-(от 300 до 800) и по у-(положение указателя мыши по у) и выведение цвета этого пикселя в текст бокс в РГБ.

Ответить

Номер ответа: 9
Автор ответа:
 Дмитрий Юпатов



Вопросов: 4
Ответов: 457
 Web-сайт: cargomaster.at.ua/
 Профиль | | #9
Добавлено: 08.07.11 16:59
значит, надо обрабатывать событие сдвига курсора. Но не только в пределах окна, а вообще...

Ответить

Номер ответа: 10
Автор ответа:
 Алексей



ICQ: нету 

Вопросов: 6
Ответов: 42
 Профиль | | #10 Добавлено: 09.07.11 08:41
дак а разве в данном коде имеет значение находитсяли курсор в пределах окна??

Ответить

Номер ответа: 11
Автор ответа:
 Ким Чен Ир



Вопросов: 0
Ответов: 140
 Профиль | | #11 Добавлено: 09.07.11 12:27
В данном коде имеют значения два чудовищных цикла в процедуре таймера.
И совершенно непонятно, что значит
непрерывное определение цвета пикселя по координатам х-(от 300 до 800)

Вывести все стопицот значений зараз?

Ответить

Номер ответа: 12
Автор ответа:
 Алексей



ICQ: нету 

Вопросов: 6
Ответов: 42
 Профиль | | #12 Добавлено: 09.07.11 13:34
последовательное. сначала в точке 300, потом 301, потом 302 и т.д.

Ответить

Номер ответа: 13
Автор ответа:
 Ким Чен Ир



Вопросов: 0
Ответов: 140
 Профиль | | #13 Добавлено: 09.07.11 14:05
То есть за миллисекунду в текстбоксе должно последовательно промелькнуть 500 значений по X, при движении мыши по Y?

Ответить

Номер ответа: 14
Автор ответа:
 Алексей



ICQ: нету 

Вопросов: 6
Ответов: 42
 Профиль | | #14 Добавлено: 10.07.11 15:06
кто сказал что за 1? лучше посоветуй чтонить если можешь)

Ответить

Номер ответа: 15
Автор ответа:
 Ким Чен Ир



Вопросов: 0
Ответов: 140
 Профиль | | #15 Добавлено: 10.07.11 15:23
Что посоветовать.. не устраивать кучу циклов в таймере.
Попробуй еще раз популярно объяснить народу, что ты хочешь видеть.)
Вот вариант реагирующий на движение мыши.

  1. Public Class Form1
  2.     Structure MSLLHOOKSTRUCT
  3.         Dim pt As Point
  4.         Dim mouseData As Integer
  5.         Dim flags As Integer
  6.         Dim time As Integer
  7.         Dim dwExtraInfo As IntPtr
  8.     End Structure
  9.  
  10.     Private Delegate Function HookProc(ByVal code As Integer, ByVal wParam As IntPtr, ByRef lParam As MSLLHOOKSTRUCT) As Integer
  11.     Private Declare Function SetWindowsHookExA Lib "user32" (ByVal hookType As Integer, ByVal lpfn As HookProc, ByVal hMod As IntPtr, ByVal dwThreadId As UInteger) As IntPtr
  12.     Private Declare Function CallNextHookEx Lib "user32" (ByVal hhk As IntPtr, ByVal nCode As Integer, ByVal wParam As IntPtr, ByRef lParam As MSLLHOOKSTRUCT) As Integer
  13.     Private Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hhk As IntPtr) As Integer
  14.     Private Declare Function GetPixel Lib "gdi32" (ByVal hdc As IntPtr, ByVal nXPos As Integer, ByVal nYPos As Integer) As Integer
  15.     Private Declare Function GetWindowDC Lib "user32" (ByVal hWnd As IntPtr) As IntPtr
  16.     Private Declare Function ReleaseDC Lib "user32" (ByVal hWnd As IntPtr, ByVal hdc As IntPtr) As Integer
  17.     Private hookmouseLL As IntPtr
  18.  
  19.     Private Sub Form1_Disposed(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Disposed
  20.         UnhookWindowsHookEx(hookmouseLL)
  21.     End Sub
  22.     Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  23.         hookmouseLL = SetWindowsHookExA(14, AddressOf MouseLL, 0, 0)
  24.     End Sub
  25.  
  26.     Private Function MouseLL(ByVal code As Integer, ByVal wParam As IntPtr, ByRef lParam As MSLLHOOKSTRUCT) As Integer
  27.         Dim deskDC = GetWindowDC(0)
  28.         Dim mycolor As Color = ColorTranslator.FromOle(GetPixel(GetWindowDC(0), lParam.pt.X, lParam.pt.Y))
  29.         TextBox1.BackColor = mycolor
  30.         TextBox1.Text = ColorTranslator.ToHtml(mycolor)
  31.         ReleaseDC(0, deskDC)
  32.         Return (CallNextHookEx(hookmouseLL, code, wParam, lParam))
  33.     End Function
  34. End Class

Ответить

Страница: 1 | 2 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам