コード例 #1
0
ファイル: bresenham.c プロジェクト: Robzz/fain_proj
int main(int argc, char** argv) {
    Image* img = I_new(640, 480);
    I_fill(img, C_new(0, 0, 0));
    I_changeColor(img, C_new(255, 255, 255));
    // Try horizontal lines, from left to right and right to left
    draw_line_bresenham(img, 100, 100, 200, 100);
    draw_line_bresenham(img, 200, 200, 100, 200);
    for(int i = 100 ; i <= 200 ; ++i) {
        assert(img->_buffer[i][100]._blue == 255);
        assert(img->_buffer[i][100]._red == 255);
        assert(img->_buffer[i][100]._green == 255);
        assert(img->_buffer[i][200]._blue == 255);
        assert(img->_buffer[i][200]._red == 255);
        assert(img->_buffer[i][200]._green == 255);
    }
    // Try vertical lines, from top to bottom and bottom to top 
    draw_line_bresenham(img, 100, 100, 100, 200);
    draw_line_bresenham(img, 200, 200, 200, 100);
    for(int i = 100 ; i <= 200 ; ++i) {
        assert(img->_buffer[100][i]._blue == 255);
        assert(img->_buffer[100][i]._red == 255);
        assert(img->_buffer[100][i]._green == 255);
        assert(img->_buffer[200][i]._blue == 255);
        assert(img->_buffer[200][i]._red == 255);
        assert(img->_buffer[200][i]._green == 255);
    }
}
コード例 #2
0
int main(int argc, char **argv)
{
	red = C_new(1.0, 0.0, 0.0);
	green = C_new(0.0, 1.0, 0.0);
	black = C_new(0.0, 0.0, 0.0);
	white = C_new(1.0, 1.0, 1.0);

	if((argc!=3)&&(argc!=2))
	{
		fprintf(stderr,"\n\nUsage \t: %s <width> <height>\nou",argv[0]);
		fprintf(stderr,"\t: %s <ppmfilename> \n\n",argv[0]);
		exit(1);
	}
	else
	{
		if(argc==2)
		{
			img = I_read(argv[1]);
			largeur = img->_width;
			hauteur = img->_height;
		}
		else
		{
			largeur = atoi(argv[1]);
			hauteur = atoi(argv[2]);

			img = I_new(largeur,hauteur);
			//Color rouge = C_new(100,0,0);
			//Color blanc = C_new(1.0, 1.0, 1.0);
			//I_checker(img,rouge,blanc,50);
		}
		int windowPosX = 100, windowPosY = 100;

		glutInitWindowSize(largeur,hauteur);
		glutInitWindowPosition(windowPosX,windowPosY);
		glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE );
		glutInit(&argc, argv);
		glutCreateWindow(argv[0]);

		glViewport(0, 0, largeur, hauteur);

		glMatrixMode(GL_PROJECTION);
		glLoadIdentity();
		glMatrixMode(GL_MODELVIEW);
		glLoadIdentity();

		glOrtho(0,largeur,0,hauteur,-1,1);

		glutDisplayFunc(display_CB);
		glutKeyboardFunc(keyboard_CB);
		glutSpecialFunc(special_CB);
		glutMouseFunc(mouse_CB);
		// glutMotionFunc(mouse_move_CB);
		// glutPassiveMotionFunc(passive_mouse_move_CB);

		glutMainLoop();

		return 0;
	}
}
コード例 #3
0
ファイル: fortune.c プロジェクト: hyperrealm/cbase
c_fortune_db_t *C_fortune_opendb(const char *basename)
{
  c_fortune_db_t *db;
  struct stat stbuf;
  char *buf;
  size_t len;

  len = strlen(basename) + strlen(C_FORTUNE_INDEX_EXT) + 2;

  buf = C_newstr(len);
  snprintf(buf, len, "%s.%s", basename, C_FORTUNE_INDEX_EXT);

  if(access(basename, (F_OK | R_OK)) || access(buf, (F_OK | R_OK)))
  {
    C_free(buf);
    return(NULL);
  }

  db = C_new(c_fortune_db_t);

  db->data = fopen(basename, "r");
  db->index = fopen(buf, "r");

  stat(basename, &stbuf);
  db->filelen = stbuf.st_size;

  stat(buf, &stbuf);
  db->count = (stbuf.st_size / sizeof(long));

  C_free(buf);

  return(db);
}
コード例 #4
0
ファイル: Image.c プロジェクト: KirbX/Bresenham-Scanline
void I_draw(Image *img)
{
	glBegin(GL_POINTS);
	int xwin, ywin, ximg, yimg;
	for(xwin=0;xwin<img->_width;xwin++)
		for(ywin=0;ywin<img->_height;ywin++)
		{
			_windowToImage(img, xwin, ywin, &ximg, &yimg);
			Color c;
			if((ximg>=0)&&(ximg<img->_width)&&
			   (yimg>=0)&&(yimg<img->_height))
				c = img->_buffer[ximg][yimg];
			else
				c = C_new(0,0,0);

			glColor3f(c._red,c._green,c._blue);
			glVertex2i(xwin,ywin);
		}
	glEnd();
}
コード例 #5
0
ファイル: Image.c プロジェクト: KirbX/Bresenham-Scanline
Image* I_new(int width, int height)
{
	Image *img_new = (Image*)malloc(sizeof(Image));
	img_new->_width = width;
	img_new->_height = height;
	img_new->_xzoom = 0;
	img_new->_yzoom = 0;
	img_new->_zoom = 1.0;

	img_new->_xoffset=0;
	img_new->_yoffset=0;

	img_new->_current_color = C_new(255,255,255);

	img_new->_buffer = (Color**)calloc(width,sizeof(Color*));

	int x;
	for(x=0;x<width;x++)
		img_new->_buffer[x] = (Color*)calloc(height,sizeof(Color));

	return img_new;
}
コード例 #6
0
ファイル: random.c プロジェクト: hyperrealm/cbase
uint_t C_random(uint_t range)
{
  uint_t r;

#ifdef THREADED_LIBRARY
  uint_t *seed;

  pthread_once(&__C_random_once, __C_random_init_once);

  seed = (uint_t *)pthread_getspecific(__C_random_key);
  if(! seed)
  {
    seed = C_new(uint_t);
    *seed = (time(NULL) + (long)pthread_self());
    pthread_setspecific(__C_random_key, (void *)seed);
  }

  r = (uint_t)rand_r(seed);
#else
  r = (uint_t)rand();
#endif /* THREADED_LIBRARY */

  return((int)((float)range * r / RAND_MAX));
}
コード例 #7
0
ファイル: Image.c プロジェクト: KirbX/Bresenham-Scanline
Image* I_read(char *imagefilename)
{
	Image *img;
	char command[100];

	if(_isPpm(imagefilename))	sprintf(command,"cp %s input.ppm",imagefilename);
	else					sprintf(command,"convert %s input.ppm",imagefilename);

	int stat = system(command);
	if(stat!=0)
	{
		fprintf(stderr,"Convert : %s -> input.ppm impossible conversion.\n", imagefilename);
		exit(1);
	}
	else
	{
		Ppm ppm = PPM_nouv("input.ppm", PPM_LECTURE);
		system("rm input.ppm");

		fprintf(stderr,"%d x %d\n",PPM_largeur(ppm),PPM_hauteur(ppm));

		if(ppm!=NULL)
		{
			img = I_new(PPM_largeur(ppm),PPM_hauteur(ppm));
			int nb_bits=ppm->_nb_bits;
			int valmax = ppm->_valmax;

			int nb_pixels = img->_width*img->_height;

			if(nb_bits <= 8)
			{
				unsigned char *donnees = (unsigned char*)calloc(3*nb_pixels,sizeof(unsigned char));
				PPM_lectureDonneesChar(ppm, donnees);

				int x,y;
				for(y=0;y<img->_height;y++)
					for(x=0;x<img->_width;x++)
					{
						int indice = (img->_height-y)*img->_width + x;
						Color c = C_new((1.0*donnees[3*indice  ])/valmax,
										(1.0*donnees[3*indice+1])/valmax,
										(1.0*donnees[3*indice+2])/valmax);
						_plot(img,x,y,c);
					}
			}
			else
			{
				unsigned short *donnees = (unsigned short*)calloc(3*nb_pixels,sizeof(unsigned short));
				PPM_lectureDonneesShort(ppm, donnees);
				int x,y;
				for(y=0;y<img->_height;y++)
					for(x=0;x<img->_width;x++)
					{
						int indice = (img->_height-y)*img->_width + x;
						Color c = C_new((1.0*donnees[3*indice  ])/valmax,
										(1.0*donnees[3*indice+1])/valmax,
										(1.0*donnees[3*indice+2])/valmax);
						img->_buffer[x][y] = c;
					}
			}
			PPM_fermeture(ppm);
			return(img);
		}
		else
			return(NULL);
	}
}
コード例 #8
0
ファイル: pty.c プロジェクト: hyperrealm/cbase
c_pty_t *C_pty_create(void)
{
  int mfd, sfd;
  c_pty_t *pty;
  char pts_name[11] = "", *pts = NULL;

#if defined HAVE_STROPTS_H

  c_bool_t ok = FALSE;

  /* open master */

  if((mfd = open(C_TERM_MASTER, O_RDWR)) >= 0)
    if(grantpt(mfd) >= 0)
      if(unlockpt(mfd) >= 0)
        ok = TRUE;

  if(! ok)
  {
    C_error_set_errno(C_EGETPTY);
    return(NULL);
  }

  /* open slave */

  pts = (char *)ptsname(mfd);
  if(pts == NULL)
  {
    C_error_set_errno(C_EGETPTY);
    return(NULL);
  }

  if((sfd = open(pts, O_RDWR)) < 0)
  {
    C_error_set_errno(C_EOPEN);
    return(NULL);
  }

  ok = FALSE;

  if(ioctl(sfd, I_PUSH, "ptem") >= 0)
    if(ioctl(sfd, I_PUSH, "ldterm") >= 0)
      ok = TRUE;

  if(! ok)
  {
    C_error_set_errno(C_EIOCTL);
    return(NULL);
  }

#elif defined HAVE_OPENPTY

  if(openpty(&mfd, &sfd, pts_name, NULL, NULL) < 0)
  {
    C_error_set_errno(C_EGETPTY);
    return(NULL);
  }

  pts = pts_name;

#else /* fall back on the old crude BSD way */

  if((mfd = __C_pty_open_master_BSD(pts_name)) < 0)
  {
    C_error_set_errno(C_EOPEN);
    return(NULL);
  }

  if((sfd = __C_pty_open_slave_BSD(mfd, pts_name)) < 0)
  {
    C_error_set_errno(C_EOPEN);
    return(NULL);
  }

  pts = pts_name;

#endif

  pty = C_new(c_pty_t);
  pty->master_fd = mfd;
  pty->slave_fd = sfd;
  strcpy(pty->pts_name, pts_name);

  return(pty);
}