печать в файл печатает только последнюю строку - PullRequest
0 голосов
/ 15 сентября 2018

Я создаю программу в Processing.js, которая помогает мне создавать цветовые схемы для пиксельной графики. Генератор рампы работает, поэтому теперь мне нужна программа для преобразования цветов HSV, с которыми я работаю, в RGB, чтобы я мог ввести их в программу, которую я использую (она не позволяет мне использовать цветовое пространство HSV для некоторых причина, но я в порядке с этим, потому что мне комфортно с этой программой).

Вот функция, которая вызывает проблемы

void convert(float h,float s,float v){
// h will be 0-360, s and v are 0-100
PrintWriter output;
output = createWriter("value.txt");
float S = s/100;
float V = v/100;
//the conversion algorithm I found expects s and v to be 0-1
float c = S*V;
float x = c*(1-abs(((h/60)%2)-1));
float e = V-c;
float R = 0.0;
float G = 0.0;
float B = 0.0;
if(0 <= h && h <= 60) {
R = c;
G = x;
B = 0;
} else if(60 <= h && h <= 120) {
R = x;
G = c;
B = 0;
} else if(120 <= h && h <= 180) {
R = 0;
G = c;
B = x;
} else if(180 <= h && h <= 240) {
R = 0;
G = x;
B = c;
} else if(240 <= h && h <= 300){
R = x;
G = 0;
B = c;
} else if(300 <= h && h <= 360) {
R = c;
G = 0;
B = x;
} else {
}
float r = R + e;
float g = G + e;
float b = B + e;
println(round(r*255)+","+round(g*255)+","+round(b*255));
output.println(round(r*255)+","+round(g*255)+","+round(b*255));
output.flush();
output.close();
}

println, который не записывает в файл, прекрасно отображается в консоли, но output.println записывает только последнюю строку в файл. Я ожидаю 220 строк вывода. При необходимости я могу отредактировать вопрос, чтобы получить остальную часть кода, но это единственная функция, которая сейчас вызывает проблемы. Вот исходный код алгоритма преобразования, который я использую .

1 Ответ

0 голосов
/ 15 сентября 2018

В будущем, пожалуйста, постарайтесь сузить свою проблему до MCVE , например:

void draw() {
  point(mouseX, mouseY);

  PrintWriter output = createWriter("positions.txt"); 
  output.println(mouseX);
  output.flush();
  output.close();
}

Эта программа показывает ту же проблему, с которой вы столкнулись, но работать с ней намного проще.

Проблема в том, что вы создаете новый PrintWriter каждый кадр. Вместо этого вам нужно создать его один раз в начале и постоянно записывать в него во время работы вашей программы.

С ссылка :

PrintWriter output;

void setup() {
  // Create a new file in the sketch directory
  output = createWriter("positions.txt"); 
}

void draw() {
  point(mouseX, mouseY);
  output.println(mouseX);  // Write the coordinate to the file
}

void keyPressed() {
  output.flush();  // Writes the remaining data to the file
  output.close();  // Finishes the file
  exit();  // Stops the program
}
...