Hola, gracias por tu respuesta.
Parece que algo de lo del uso de recursos se debia a la manera en la que estaba tomando las capturas, encontre un código que me funciona mejor, con el anterior me usaba entre el 30 y el 50% del cpu en mi aplicacion de prueba, con este que encontre solo utiliza el 14.
Aqui lo pongo por si a alguien le interesa, no es mio, lo saque de la web de el guille.
// Capturar toda la pantalla
Graphics gr = this.CreateGraphics();
// Tamaño de lo que queremos copiar
// En este caso el tamaño de la ventana principal
Size fSize = Screen.PrimaryScreen.Bounds.Size;
// Creamos el bitmap
Bitmap bm = new Bitmap(fSize.Width, fSize.Height, gr);
// Un objeto Graphics a partir del bitmap
Graphics gr2 = Graphics.FromImage(bm);
// Copiar todo el área de la pantalla
gr2.CopyFromScreen(0, 0, 0, 0, fSize);
// Asignamos la imagen al PictureBox
pictureBox1.Image = bm;
Ahora, ¿que podria ser mejor?, yo tenia pensado hacer un for dentro de otro for para que me recorriera todos los pixeles de la pantalla hasta que encuentre el que necesito, no conozco otra manera de hacerlo.
Pondria mi codigo que tengo, pero aun no funciona, tengo algun error por ahi que no encuentro, pero estoy intentando solucionarlo.
Saludos y gracias