Zjištení barvy pixelu   zodpovězená otázka

VB.NET, WinForms

Čau,

chtěl bych se zeptat jestli existuje nějakej způsob jak zjistit barvu určitýho pixelu kdekoliv na ploše (nejen ve formu). Ve VB6 jsem používal toto: http://www.vbnet.cz/forum-tema--3351-zji...

Zase bych zadal souřadnice a ono by mi to vrátilo barvu pixelu.

Díky :)

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Najprv treba vytvoriť bitmapu, kde to chcete skopírovať, potom Graphics.FromImage a následne na vytvorenom objekte g.CopyFromScreen. Ale neviem, či to do bitmapy prenesie len to, čo vykresľuje GDI ,GDI+ a pod. alebo aj to, čo vykresľuje DirectX, XNA a pod.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Nedalo mi to a vyskúšal som to na jednej hre a videl som skoro všetko, iba kurzor sa dakde stratil.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Už jsem na to přišel :)

Option Strict Off
Option Explicit On
Imports VB = Microsoft.VisualBasic
Imports System.Runtime.InteropServices

Public Class Form1


    Inherits System.Windows.Forms.Form

    <StructLayout(LayoutKind.Sequential)> Private Structure POINTAPI
        Dim x As Integer
        Dim y As Integer
    End Structure

    Private Declare Function GetCursorPos Lib "user32" (ByRef lpPoint As POINTAPI) As Integer
    Private Declare Function GetDC Lib "user32" Alias "GetDC" (ByVal hwnd As Integer) As Integer
    Private Declare Function GetPixel Lib "gdi32" (ByVal hdc As Integer, ByVal x As Integer, ByVal y As Integer) As Integer

    Private Sub Form1_Load(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles MyBase.Load
        Timer1.Enabled = True
    End Sub

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        Dim structCursorPosition As POINTAPI
        Call GetCursorPos(structCursorPosition)
        Dim lColor As Integer = GetPixel(GetDC(0), structCursorPosition.x, structCursorPosition.y)
        BackColor = System.Drawing.ColorTranslator.FromOle(lColor)
        Dim strRgb As String = VB.Right("000000" & Hex(lColor), 6)
        Text = "R:" & VB.Right(strRgb, 2) & " G:" & Mid(strRgb, 3, 2) & " B:" & VB.Left(strRgb, 2)
    End Sub

End Class

Ještě se sluší dodat zdroj: http://www.vbforums.com/showthread.php?t...

nahlásit spamnahlásit spam 0 odpovědětodpovědět

A môžete mi povedať, že v čom je Vaše riešenie lepšie ? Ak ste si nevšimli, v hneď druhom príspevku som Vám napísal, ako sa to dá aj bez Platform Invoke.A navyše, ak by ste chcel Vaším spôsobom zistiť naraz celú plochu, tak by ste musel v cykle prejsť celú obrazovku a po jednom to preniesť do bitmapy.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Já jsem nepsal, že je to lepší. Ale funguje to a to je pro mě důležitý.

Mě stačí zjišťovat barvu jednoho určitýho pixelu. Viz. můj první příspěvek (odkaz v něm) v této diskuzi.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Zdravim mam stejný dotaz akorat ve VB2010, potřebuju číslo barvy z určitého pixelu jehož souřadnice už mám, abych sním mohl dále pracovat.. Pls o podrobnější radu THX.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Mělo by to jít stejným kódem, akorát místo

Dim lColor As Integer = GetPixel(GetDC(0), structCursorPosition.x, structCursorPosition.y)

zapíšeš

Dim lColor As Integer = GetPixel(GetDC(0), SouradniceX, SouradniceY)

'SouradniceX a SouradniceY jsou souřadnice požadovaného pixelu

Kam se ukládá barva asi z kódu vyčteš ;)

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback