Двухцветный линейный градиент .ppm в стеке

Я создаю функцию в C ++, которая создает файл двухцветного градиента .ppm из цветов и размеров, введенных пользователем. Основная проблема, с которой я столкнулся — это петля цветов, которая, как кажется, перезапускает образы, как показано здесь. введите описание изображения здесь

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

#include <iomanip>
#include <iostream>
#include <fstream>
#include <string>

using namespace std;

struct Color
{
int red;
int green;
int blue;
};

void smoosh(int rows, int cols, Color leftColor, Color rightColor, string  filename);
int main()
{
int y;
int x;
Color l;
Color r;
string f;
cout << "Left Color: ";
cin >> l.red >> l.green >> l.blue;
cout << "\nRight Color: ";
cin >> r.red >> r.green >> r.blue;
cout << "\nHeight: ";
cin >> y;
cout << "\nWidth: ";
cin >> x;
cout << "\nFile Name: ";
cin >> f;
smoosh(y, x, l, r, f);return 0;
}
void smoosh(int rows, int cols, Color leftColor, Color rightColor, string   filename)
{
int maxI = 256;
ofstream fout;
fout.open(filename);
fout << "P3\n";
fout << cols << " " << rows << "\n" << maxI - 1 << "\n";
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
fout << (leftColor.red + ((j / 255.0) * (rightColor.red - leftColor.red))) << " ";
fout << (leftColor.green + ((j / 255.0) * (rightColor.green - leftColor.green))) << " ";
fout << (leftColor.blue + ((j / 255.0) * (rightColor.blue - leftColor.blue)))<< " ";
}
fout << endl;
}
fout.close();
}

Введенные пользователем значения для изображения выше были
Цвет слева: 255 0 0
Правильный цвет: 255 255 0
Высота: 200
Ширина: 400, Заранее спасибо за помощь.

0

Решение

Я думаю, что должно быть что-то вроде

current.red = leftcolor.red;

in the loop:

current.red += (rightcolor.red - leftcolor.red)/cols

fout << current.red

...
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]