2016-10-19 2 views
0

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

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

#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

J это номер столбца. Вы делите его на 255.0, что, по-видимому, является максимальным значением цвета. Каков физический смысл этого? –

ответ

1

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

current.red = leftcolor.red; 

in the loop: 

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

    fout << current.red 

    ... 
Смежные вопросы