首页 > 其他 > 详细

在固定长方形里产生渐变

时间:2014-04-07 12:48:32      阅读:391      评论:0      收藏:0      [点我收藏+]

/* CPSC 2100: redgreen.c

This program creates a ppm file for a 600x400 box, that is red
in the left half and green in the right half.

The ppm image is written to the file specified on the command
line, e.g. the program is initiated as:

./redgreen output-filename

which would create the PPM image file specified by output-filename

*/

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <memory.h>
#include <assert.h>
#include "rgb.h"


int main(int argc, char *argv[]) {
pixel_t *img; /* image array */
//int rowNdx, colNdx; /* Row and column indices */
FILE *imageFP; /* PPM output file */

/* Open the PPM output file */
if (argc != 4)
{
fprintf(stderr, "Usage: ./redgreen columns rows output-filename\n");
exit(1);
}

imageFP = fopen(argv[3], "w");
assert(imageFP != NULL);
int rows = 400;
int columns = 600;
rows = atoi(argv[2]);
columns = atoi(argv[1]);
double ratio = columns/rows;

double maxdistance = sqrt((ratio*(rows - 1)) * (ratio*(rows - 1)) + (columns - 1) * (columns - 1));
double distance;


img = (pixel_t *) malloc(sizeof(pixel_t) * columns * rows);
pixel_t *pixaddr = NULL;


/* Write the ppm header */
char ss[100];
memset(ss, 0, sizeof(char) * 100);
sprintf(ss, "P6 %d %d 255\n", columns, rows);

fprintf(imageFP, ss);
int r,c;
for (r = 0; r < rows; r++)
{
for (c = 0; c < columns; c++)
{
distance = sqrt((ratio*r) * (ratio*r) + c * c);
pixaddr = img + r * columns + c;
pixaddr->red = (1 - distance/maxdistance)*255;
pixaddr->blue = distance/maxdistance*255;
pixaddr->green = 0;
}
}

/* Write out the pixel */
fwrite(img, sizeof(pixel_t), columns * rows, imageFP);
free(img);
return 0;
}

 

rgb.h

typedef struct pixel_type
{
unsigned char red;
unsigned char green;
unsigned char blue;
} pixel_t;

参考

http://people.cs.clemson.edu/~rlowe/cs2100/homework/spr14/hw1/hw1.shtml

在固定长方形里产生渐变,布布扣,bubuko.com

在固定长方形里产生渐变

原文:http://www.cnblogs.com/yuanxiaoping_21cn_com/p/3647438.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!