C # получение пикселов экрана [dубликат]

Просто хотел отбросить код Роба в VB:

  Открытый класс Test Public Function IsInDomain () As Boolean Попробовать состояние Dim Как Win32.NetJoinStatus = Win32.NetJoinStatus.NetSetupUnknownStatus Dim pDomain As IntPtr =  IntPtr.Zero Dim result As Integer = Win32.NetGetJoinInformation (Nothing, pDomain, status) Если (pDomain & lt; gt; IntPtr.Zero) Затем Win32.NetApiBufferFree (pDomain) End If If (result = Win32.ErrorSuccess) Затем If (status  = Win32.NetJoinStatus.NetSetupDomainName) Затем верните True Else Return False End If Else Throw New Exception («Ошибка получения информации о домене») End If Catch ex As Exception Return False End Try End Function End Class Открытый класс Win32 Public Const ErrorSuccess As Integer =  0 Объявить автоматическую функцию NetGetJoinInformation Lib «Netapi32.dll» (ByVal server As String, ByRef IntPtr As IntPtr, ByRef status As NetJoinStatus) Как целое объявляет автоматическую функцию NetApiBufferFree Lib «Netapi32.dll» (ByVal Buffer As IntPtr) Как Integer Public Enum NetJoinStatus  NetSetupUnknownStatus  = 0 NetSetupUnjoined NetSetupWorkgroupName NetSetupDomainName End Enum End Class  

Также как и код Стефана здесь:

  Dim cs As System.Management.ManagementObject Попробуйте cs = Новая система  .Management.ManagementObject ("Win32_ComputerSystem.Name = '" + System.Environment.MachineName + "'") cs.Get () dim myDomain как string = = cs ("domain"). ToString Catch ex As Exception End Try  

Я считаю, что только второй код позволит вам узнать, к какой области присоединился компьютер, даже если текущий пользователь НЕ является членом домена.

8
задан stucampbell 21 November 2010 в 01:13
поделиться

2 ответа

Быстрый доступ к пикселям возможен с использованием метода LockBits () растрового изображения . Это вернет вам объект, содержащий указатель на начало данных пикселя, и вы можете использовать небезопасный код для доступа к памяти.

http://www.bobpowell.net/lockingbits. HTM

9
ответ дан Aliostad 15 August 2018 в 19:27
поделиться
  • 1
    Благодарю. Я поддержал это, потому что это полезная статья для некоторых других манипуляций с изображениями, которые я делаю. Но это не помогает мне получить цвет пикселя в любом месте экрана (если только я не сделаю снимок экрана, а это не то, что я хочу). – stucampbell 21 November 2010 в 10:23
  • 2
    Просто FYI, эта ссылка идет на спам сейчас – TheGeneral 6 August 2018 в 10:48

GetPixel медленный по двум причинам:

  1. Поскольку вы просматриваете экран - каждый вызов GetPixel приводит к транзакции к видеодрайверу, который, в свою очередь, принимает данные пикселя из видеопамяти.
  2. В любом случае GetPixel выполняет несколько действий, включая обрезание / преобразование координат и т. Д.
  3. . [D2] GetPixel на DIB намного быстрее.

Итак, если вы используете для запроса многих значений пикселей сразу - вы должны попытаться организовать это в одной транзакции с драйвером GDI / video.

Используя GDI, вы должны создать DIB соответствующего размера (см. CreateDIBSection ). После создания вам будет предоставлен прямой указатель на данные битов изображения. Затем скопируйте часть изображения на ваш DIB (см. [D5] BitBlt ). Также не забудьте вызвать GdiFlush , прежде чем вы действительно проверите содержимое DIB (так как видеодрайверы могут делать асинхронный рисунок).

Используя GD +, вы можете сделать то же самое, с немного более простым синтаксисом.

6
ответ дан valdo 15 August 2018 в 19:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: