Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

240
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!