creo que todo lo que puede hacer es medir cada píxel de la imagen y tomar un promedio. Si eso es demasiado lento para sus propósitos, le sugiero que tome una muestra de píxeles distribuida uniformemente y la use para calcular un promedio. También podría limitar los píxeles al área donde necesita dibujar el texto.
Puede cargar la imagen como mapa de bits (http://msdn.microsoft.com/en-us/library/system.drawing.bitmap.aspx) y usar el método GetPixel para obtener realmente los valores de color.
Cómo evalúa el brillo depende totalmente de usted. Yo sugeriría que un enfoque más simple (digamos solo tomar el valor de color más alto) en realidad podría ser mejor ya que algunos usuarios percibirán el color de manera diferente a la norma humana (daltonismo, etc.).
¿Por -1 voto, que lo lanzó? ¡El código funciona bien! –
¿Por qué necesita crear 'tmpBmp' y no usar' bm' para bloquear bits directamente en él? – sergtk
¿Por qué divide el promedio por 255 al final? @ 12 – TheCoolFrood