none
c# pixeldeki rengi yakalamak RRS feed

  • Soru

  • arkadaşlar mousun gittiği herhangi bir pixeldeki rengi panele anlık yansıtmak isitiyorum uygulamada foto veya renk tekileri yakayabiliyorum ama windowsun heryerindeki pixellerdeki renkleri yakalayıp panele yansıtmak istiyorum bunu nasıl yapabilirim sağlam kaynak veya yol gösterecek olan varmı şimdiden teşekkürler




    • Düzenleyen megahesap 15 Eylül 2016 Perşembe 19:39
    15 Eylül 2016 Perşembe 19:37

Yanıtlar

  • Sürekli ekran görüntüsü çekip onun üstünde islem yapmalısın.Bunun için async kullanırsan iyi olur.

    https://www.youtube.com/watch?v=gEgxZrXPnzc>


    • Düzenleyen Eowe 16 Eylül 2016 Cuma 04:12
    • Yanıt Olarak İşaretleyen megahesap 16 Eylül 2016 Cuma 09:42
    16 Eylül 2016 Cuma 04:11
  • GetPixel kullanabilirsin. Ornek:

    {
    	Stopwatch sw = new Stopwatch();
    	sw.Start();
    
        Color color = Color.Empty;
    	while (sw.Elapsed.Seconds < 30)
    	{
    		var c = GetPointColor();
    		if (!c.IsEmpty && color.IsEmpty || color != c)
    		{
    			Console.WriteLine(c.ToString());
    			color = c;
    		}
    	}
    }
    
    private Color GetPointColor()
    {
    	Color c = Color.Empty;
    	Point p;
    	if (GetCursorPos(out p))
    	{
    		IntPtr hdc = GetDC(IntPtr.Zero);
    		uint pixel = GetPixel(hdc, p.X, p.Y);
    		ReleaseDC(IntPtr.Zero, hdc);
    		c = Color.FromArgb((int)(pixel & 0x000000FF),
    					 (int)(pixel & 0x0000FF00) >> 8,
    					 (int)(pixel & 0x00FF0000) >> 16);
    	}
    	return c;
    }
    
    [DllImport("user32.dll")]
    static extern IntPtr GetDC(IntPtr hwnd);
    
    [DllImport("user32.dll")]
    static extern Int32 ReleaseDC(IntPtr hwnd, IntPtr hdc);
    
    [DllImport("gdi32.dll")]
    static extern uint GetPixel(IntPtr hdc, int nXPos, int nYPos);
    
    [DllImport("user32.dll")]
    public static extern bool GetCursorPos(out Point pt);

    • Yanıt Olarak İşaretleyen megahesap 16 Eylül 2016 Cuma 09:42
    16 Eylül 2016 Cuma 09:16
    Yanıtlayıcı

Tüm Yanıtlar

  • Sürekli ekran görüntüsü çekip onun üstünde islem yapmalısın.Bunun için async kullanırsan iyi olur.

    https://www.youtube.com/watch?v=gEgxZrXPnzc>


    • Düzenleyen Eowe 16 Eylül 2016 Cuma 04:12
    • Yanıt Olarak İşaretleyen megahesap 16 Eylül 2016 Cuma 09:42
    16 Eylül 2016 Cuma 04:11
  • GetPixel kullanabilirsin. Ornek:

    {
    	Stopwatch sw = new Stopwatch();
    	sw.Start();
    
        Color color = Color.Empty;
    	while (sw.Elapsed.Seconds < 30)
    	{
    		var c = GetPointColor();
    		if (!c.IsEmpty && color.IsEmpty || color != c)
    		{
    			Console.WriteLine(c.ToString());
    			color = c;
    		}
    	}
    }
    
    private Color GetPointColor()
    {
    	Color c = Color.Empty;
    	Point p;
    	if (GetCursorPos(out p))
    	{
    		IntPtr hdc = GetDC(IntPtr.Zero);
    		uint pixel = GetPixel(hdc, p.X, p.Y);
    		ReleaseDC(IntPtr.Zero, hdc);
    		c = Color.FromArgb((int)(pixel & 0x000000FF),
    					 (int)(pixel & 0x0000FF00) >> 8,
    					 (int)(pixel & 0x00FF0000) >> 16);
    	}
    	return c;
    }
    
    [DllImport("user32.dll")]
    static extern IntPtr GetDC(IntPtr hwnd);
    
    [DllImport("user32.dll")]
    static extern Int32 ReleaseDC(IntPtr hwnd, IntPtr hdc);
    
    [DllImport("gdi32.dll")]
    static extern uint GetPixel(IntPtr hdc, int nXPos, int nYPos);
    
    [DllImport("user32.dll")]
    public static extern bool GetCursorPos(out Point pt);

    • Yanıt Olarak İşaretleyen megahesap 16 Eylül 2016 Cuma 09:42
    16 Eylül 2016 Cuma 09:16
    Yanıtlayıcı