Код обработки для декодера изображений возвращает þ

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

void setup() {
  //size(255, 255);
  colorMode(HSB);
  String result = decode();
  println(result);
  saveStrings("output.txt", new String[]{result});
}
String decode() {
  PImage img = loadImage("code.png");
  //image(img, 0, 0);
  img.loadPixels();
  String decoded = "";
  int[] chars = new int[255 * 255];
  for (int i = 0; i < 255; i++) {
    for (int j = 0; j < 255; j++) {
      color col = img.pixels[i * 255 + j];//get(i, j);
      if (hue(col) == 0 && saturation(col) == 0) {
        chars[floor(hue(col) * 255 + saturation(col))] = j;
        println((char) j);
      }
    }
  }
  decoded = new String(chars, 0, chars.length);
  String[] list = decoded.split("\u0000");
  StringBuilder builder = new StringBuilder();
  for (String string : list) {
    builder.append(string);
  }

  decoded = builder.toString();
  return decoded;
}

person Jfly 27    schedule 22.02.2018    source источник
comment
Пожалуйста, отладьте свой код. Какая строка кода ведет себя не так, как вы ожидали?   -  person Kevin Workman    schedule 23.02.2018
comment
Я думаю, это chars[floor(hue(col) * 255 + saturation(col))] = j;   -  person Jfly 27    schedule 23.02.2018
comment
Звучит как хорошее начало. Каково значение каждой переменной в этой строке? Разбейте эту строку на более мелкие отдельные шаги, чтобы вы могли точно понять, что она делает. Что вы ожидаете от этой строки кода? Что он делает вместо этого?   -  person Kevin Workman    schedule 23.02.2018
comment
Предполагается упорядочить символ, которому соответствует значение x пикселя по оттенку и насыщенности. Он просто возвращается — независимо от того, что я ввожу.   -  person Jfly 27    schedule 23.02.2018


Ответы (1)


Основная проблема, вероятно, связана с if (hue(col) == 0 && saturation(col) == 0) {. В следующей строке всегда будет 0 для hue(col) и saturation(col). Это означает, что вы всегда выполняете chars[0] = j;, и ваш конечный результат имеет только один символ (þ, который вы описали).

person H.Scheidl    schedule 23.02.2018
comment
Спасибо! Это исправило это. - person Jfly 27; 24.02.2018