una tiene saber recorrer procesamiento pixeles matrices leer jpg indexadas imagenes imagen cuantos contar compresion como c# image bitmap rgb

c# - tiene - ¿Cómo puedo leer los valores de píxeles de imagen como RGB en una matriz 2d?



procesamiento de imagenes matrices (3)

Bueno, si lo entendí correctamente, desea recorrer los píxeles de la imagen, realizar algún tipo de prueba y, si pasa, desea almacenar ese píxel en una matriz. Así es como puedes hacer eso:

using System.Drawing; Bitmap img = new Bitmap("*imagePath*"); for (int i = 0; i < img.Width; i++) { for (int j = 0; j < img.Height; j++) { Color pixel = img.GetPixel(i,j); if (pixel == *somecondition*) { **Store pixel here in a array or list or whatever** } } }

No creas que necesitas algo más. Si necesita los valores RGB específicos, puede obtenerlos de los métodos correspondientes en el objeto de píxel.

Estaba haciendo un editor de mapas 2D para mi juego de plataformas de azulejos cuadrados, cuando me di cuenta de que realmente podía usar un editor de imágenes con sus habilidades para repintar píxeles adyacentes y muchos más, así que pensé que debería intentar leer un nivel pintado con una aplicación que entonces lo convertirá en un formato de peso ligero.

No estoy seguro si el uso de un formato de mapa de bits es obligatorio para tal cosa, pero supongo que leer un píxel específico sería más fácil que con PNG, por ejemplo.

Así que mi objetivo es abrir una imagen, iterar a través de cada píxel, buscar aquellos colores que se ajusten a mi esquema de mosaico y colocar el mosaico correspondiente en la matriz de bloques.

Nota: Ya tengo mi formato de peso ligero, por lo que solo necesito leer los valores de píxeles en la matriz.

Solución: Mi dibujo se ve así:

Bitmap myBitmap = new Bitmap(@"input.png"); for (int x = 0; x < myBitmap.Width; x++) { for (int y = 0; y < myBitmap.Height; y++) { Color pixelColor = myBitmap.GetPixel(x, y); // things we do with pixelColor } } Ejemplo 2:

Bitmap myBitmap = new Bitmap(@"input.png"); for (int x = 0; x < myBitmap.Width; x++) { for (int y = 0; y < myBitmap.Height; y++) { // Get the color of a pixel within myBitmap. Color pixelColor = myBitmap.GetPixel(x, y); string pixelColorStringValue = pixelColor.R.ToString("D3") + " " + pixelColor.G.ToString("D3") + " " + pixelColor.B.ToString("D3") + ", "; switch (pixelColorStringValue) { case "255 255 255": { // white pixel break; } case "000 000 000": { // black pixel break; } } } }


Creo que he hecho algo similar una vez. Aquí hay un fragmento de código de lo que estaba haciendo:

public static void main(String[] args) { try { String path = "src/colors.jpg"; BufferedImage image = ImageIO.read(new File(path)); int w = image.getWidth(); int h = image.getHeight(); for (int y = 0; y < h; y++) { for (int x = 0; x < w; x++) { Color c = new Color(image.getRGB(x, y)); int red = c.getRed(); int green = c.getGreen(); int blue = c.getBlue(); countColor(red, green, blue); totalCount++; } } printColors(); } catch (Exception ex) { System.out.println(ex.getMessage()); } }

En el bucle interno para puedes poner algo en una matriz [i] [j]. (Si eso es lo que buscas)


public Color[][] getBitmapColorMatrix(string filePath) { Bitmap bmp = new Bitmap(filePath); Color[][] matrix; int height = bmp.Height; int width = bmp.Width; if (height > width) { matrix = new Color[bmp.Width][]; for (int i = 0; i <= bmp.Width - 1; i++) { matrix[i] = new Color[bmp.Height]; for (int j = 0; j < bmp.Height - 1; j++) { matrix[i][j] = bmp.GetPixel(i, j); } } } else { matrix = new Color[bmp.Height][]; for (int i = 0; i <= bmp.Height - 1; i++) { matrix[i] = new Color[bmp.Width]; for (int j = 0; j < bmp.Width - 1; j++) { matrix[i][j] = bmp.GetPixel(i, j); } } } return matrix; }