Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

244
Vistas
Escala de grises a RGB: el color del píxel está configurado con un valor incorrecto

Tengo un programa que lee el valor en escala de grises (0 - 255) de un píxel y lo cambia a un color RGB (fórmula ver código).

Aquí está mi código:

 Bitmap img = new Bitmap(@"somepath"); Bitmap new_img = new Bitmap(img.Width, img.Height); for (int i = 0; i < img.Width; i++) { for (int j = 0; j < img.Height; j++) { Color pixel = img.GetPixel(i, j); Color my = new Color(); int R_new = 0; if (pixel.R > 126) { R_new = (pixel.R -127) / 128 * 255; } int B_new = 0; if (pixel.B < 128) { B_new = (1 - pixel.R / 127) * 255; } int G_new = 0; if (pixel.G < 128) { G_new = pixel.R/127 * 255; } my = Color.FromArgb(R_new, G_new, B_new); new_img.SetPixel(i, j, my); } } new_img.Save(@"C:somepath");

En la siguiente imagen ingrese la descripción de la imagen aquí puede ver que el valor verde del píxel anterior es 6 y el del nuevo píxel está configurado en 255, lo cual es incorrecto. De acuerdo con la fórmula, debe establecerse en 12.

Aquí está mi pregunta: ¿Por qué el valor del píxel está mal?

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Tienes dos problemas.

#1: Está pasando el valor azul en lugar del valor verde. Compruebe el orden esperado de los argumentos :

 Color.FromArgb(int red, int green , int blue)

#2: B_new es 255 debido a cómo se maneja la división de enteros :

Para los operandos de tipo entero, el resultado del operador / es de tipo entero y es igual al cociente de los dos operandos redondeado a cero:

 (1 - 6 / 127) * 255 // becomes 255

Entonces, 6 / 127 es igual a 0.047244094488189 pero se redondea a cero... haciendo su fórmula:

 (1 - 0) * 255 // becomes 255

Haga que al menos uno de sus términos de división sea de tipo punto flotante y obtendrá un valor decimal:

 (1 - pixel.R / 127.0 ) * 255 // becomes 242.9527559055118

... que luego tendrá que convertir a un int para ajustarse a la firma del método de Color.FromArgb(int, int, int) .

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda