Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

247
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda