Как я могу считывать значения пикселей изображения как RGB в 2d-массив?

Я делал 2-й редактор карт для своей платформы с квадратной плиткой, когда понял, что могу реально использовать редактор изображений с его способностями перерисовывать соседние пиксели и многое другое, поэтому я решил, что должен попробовать и прочитать окрашенный уровень приложением, которое затем преобразует его в формат lightweigh.

Я не уверен, что использование формата растрового изображения является обязательным для такой вещи, но, я думаю, чтение определенного пикселя было бы проще, чем при использовании PNG.

Поэтому моя цель – открыть изображение, прорежировать каждый пиксель, искать те, которые соответствуют моей схеме плитки, и поместить соответствующую плитку в массив блоков.

Примечание. У меня уже есть формат lightweigh, поэтому мне нужно только считывать значения пикселей в массив.


Решение. Мой эскиз выглядит так:

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 } } 

Пример 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; } } } } 

Ну, если я правильно понял, вы хотите перебирать пиксели в изображении, выполнять какой-то тест, и если он пройдет, вы хотите сохранить этот пиксель в массиве. Вот как вы могли это сделать:

 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** } } } 

Не думай, что тебе нужно что-нибудь еще. Если вам нужны конкретные значения RGB, вы можете получить их из соответствующих методов в пиксельном объекте.

  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; } 

Я думаю, что однажды сделал что-то подобное. Вот fragment кода того, что я делаю:

 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()); } } 

Во внутреннем цикле for вы можете поместить что-то в массив [i] [j]. (Если это то, что вы ищете)

  • Преобразование цвета RGBA в RGB
  • Формула для определения яркости цвета RGB
  • Что такое YCbCr444?
  • Предупреждение libpng: iCCP: известный неправильный профиль sRGB
  • Есть ли веские причины для использования шестнадцатеричных значений по десятичной для значений цвета RGB в CSS?
  • Преобразование шестнадцатеричного цвета в RGB и наоборот
  • Как преобразовать изображение RGB в оттенки серого, но сохранить один цвет?
  • Как конвертировать RGB из YUV420p для ffmpeg encoder?
  • Преобразование цвета HSL в RGB
  • Значения RGB видимого спектра
  • Как преобразовать шестнадцатеричную строку RGB в UIColor в объекте-c?
  • Давайте будем гением компьютера.