none
Capturar Cor (coordenadas X,Y) em uma sistema Web RRS feed

  • Pergunta

  • Pessoal, boa tarde!

    Pesquisei no fórum e encontrei vários posts, mas nada referente ao meu caso.

    Tenho uma aplicação web rodando e nesta preciso capturar a cor de uma determinada coordenada X,Y para depois efetuar uma tratativa com a cor.

    O sistema vai rodar de 30 em 30 segundos e ficar "monitorando" esta pagina web.

    Em java eu consegui fazer um exemplo 

    Robot _robot = new Robot();
    		
    _robot.mouseMove(x, y);
    		
    Color _color = _robot.getPixelColor(x, y);

    Mas não quero fazer em java e sim em C#.net ou VB.net

    Obrigado e abraço.

    sábado, 3 de fevereiro de 2018 19:26

Respostas

  • Bom dia,

    Já que estará executando em background, você pode alterar a posição do cursor com este código:

    use System.Runtime.InteropServices;
    
    [DllImport("user32.dll")]
    static extern bool SetCursorPos(int X, int Y);
    
    public void AlterarPosicao(int X, int Y)
    {
        SetCursorPos(X, Y);
    }

    E para pegar a cor do pixel: 

    [DllImport("user32.dll", SetLastError = true)]
    public static extern IntPtr GetDesktopWindow();
    [DllImport("user32.dll", SetLastError = true)]
    public static extern IntPtr GetWindowDC(IntPtr window);
    [DllImport("gdi32.dll", SetLastError = true)]
    public static extern uint GetPixel(IntPtr dc, int x, int y);
    [DllImport("user32.dll", SetLastError = true)]
    public static extern int ReleaseDC(IntPtr window, IntPtr dc);
    
    public static Color GetColorAt(int x, int y)
    {
        IntPtr desk = GetDesktopWindow();
        IntPtr dc = GetWindowDC(desk);
        int a = (int) GetPixel(dc, x, y);
        ReleaseDC(desk, dc);
        return Color.FromArgb(255, (a >> 0) & 0xff, (a >> 8) & 0xff, (a >> 16) & 0xff);
    }

    Há outras formas também neste link: https://stackoverflow.com/questions/1483928/how-to-read-the-color-of-a-screen-pixel


    Juliano Nunes - http://linkedin.com/in/julianonunes

    Lembre-se de clicar em "Votar como útil" e "Marcar como Resposta" caso tenha respondido sua dúvida.

    Remember to "Vote as Helpful" and "Mark as Answer" if your question has been answered.

    domingo, 4 de fevereiro de 2018 14:08

Todas as Respostas

  • Você quer fazer uma aplicação desktop para acessar um site e pegar a cor em uma coordenada? Ou quer fazer um site/aplicação web que captura a cor de alguma posição na própria página? Não deu pra entender bem.

    Juliano Nunes - http://linkedin.com/in/julianonunes

    Lembre-se de clicar em "Votar como útil" e "Marcar como Resposta" caso tenha respondido sua dúvida.

    Remember to "Vote as Helpful" and "Mark as Answer" if your question has been answered.

    sábado, 3 de fevereiro de 2018 22:59
  • Juliano, bom dia!

    A aplicação será desktop e vai ficar rodando em background e de tempos em tempos vai posicionar o ponteiro do mouse na coordenada 30,30 por exemplo onde estará a pagina web aberta e rodando.

    Vai pegar a cor desta coordenada e efetuar uma ação.

    Obrigado e abraço.

    domingo, 4 de fevereiro de 2018 12:11
  • Bom dia,

    Já que estará executando em background, você pode alterar a posição do cursor com este código:

    use System.Runtime.InteropServices;
    
    [DllImport("user32.dll")]
    static extern bool SetCursorPos(int X, int Y);
    
    public void AlterarPosicao(int X, int Y)
    {
        SetCursorPos(X, Y);
    }

    E para pegar a cor do pixel: 

    [DllImport("user32.dll", SetLastError = true)]
    public static extern IntPtr GetDesktopWindow();
    [DllImport("user32.dll", SetLastError = true)]
    public static extern IntPtr GetWindowDC(IntPtr window);
    [DllImport("gdi32.dll", SetLastError = true)]
    public static extern uint GetPixel(IntPtr dc, int x, int y);
    [DllImport("user32.dll", SetLastError = true)]
    public static extern int ReleaseDC(IntPtr window, IntPtr dc);
    
    public static Color GetColorAt(int x, int y)
    {
        IntPtr desk = GetDesktopWindow();
        IntPtr dc = GetWindowDC(desk);
        int a = (int) GetPixel(dc, x, y);
        ReleaseDC(desk, dc);
        return Color.FromArgb(255, (a >> 0) & 0xff, (a >> 8) & 0xff, (a >> 16) & 0xff);
    }

    Há outras formas também neste link: https://stackoverflow.com/questions/1483928/how-to-read-the-color-of-a-screen-pixel


    Juliano Nunes - http://linkedin.com/in/julianonunes

    Lembre-se de clicar em "Votar como útil" e "Marcar como Resposta" caso tenha respondido sua dúvida.

    Remember to "Vote as Helpful" and "Mark as Answer" if your question has been answered.

    domingo, 4 de fevereiro de 2018 14:08