⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 image.c

📁 这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易于我们学习和理解
💻 C
字号:
#include	<u.h>#include	<libc.h>#include	<bio.h>#include	"sky.h"char	rad28[] = "0123456789abcdefghijklmnopqr";Picture*image(Angle ra, Angle dec, Angle wid, Angle hig){	Pix *p;	uchar *b, *up;	int i, j, sx, sy, x, y;	char file[50];	Picture *pic;	Img* ip;	int lowx, lowy, higx, higy;	int slowx, slowy, shigx, shigy;	Header *h;	Angle d, bd;	Plate *pp, *bp;	if(gam.gamma == 0)		gam.gamma = -1;	if(gam.max == gam.min) {		gam.max = 17600;		gam.min = 2500;	}	gam.absgamma = gam.gamma;	gam.neg = 0;	if(gam.absgamma < 0) {		gam.absgamma = -gam.absgamma;		gam.neg = 1;	}	gam.mult1 = 1. / (gam.max - gam.min);	gam.mult2 = 255. * gam.mult1;	if(nplate == 0)		getplates();	bp = 0;	bd = 0;	for(i=0; i<nplate; i++) {		pp = &plate[i];		d = dist(ra, dec, pp->ra, pp->dec);		if(bp == 0 || d < bd) {			bp = pp;			bd = d;		}	}	if(debug)		Bprint(&bout, "best plate: %s %s disk %d %s\n",			hms(bp->ra), dms(bp->dec),			bp->disk, bp->rgn);	h = getheader(bp->rgn);	xypos(h, ra, dec, 0, 0);	if(wid <= 0 || hig <= 0) {		lowx = h->x;		lowy = h->y;		lowx = (lowx/500) * 500;		lowy = (lowy/500) * 500;		higx = lowx + 500;		higy = lowy + 500;	} else {		lowx = h->x - wid*ARCSECONDS_PER_RADIAN*1000 /			(h->param[Pxpixelsz]*h->param[Ppltscale]*2);		lowy = h->y - hig*ARCSECONDS_PER_RADIAN*1000 /			(h->param[Pypixelsz]*h->param[Ppltscale]*2);		higx = h->x + wid*ARCSECONDS_PER_RADIAN*1000 /			(h->param[Pxpixelsz]*h->param[Ppltscale]*2);		higy = h->y + hig*ARCSECONDS_PER_RADIAN*1000 /			(h->param[Pypixelsz]*h->param[Ppltscale]*2);	}	free(h);	if(lowx < 0) lowx = 0;	if(higx < 0) higx = 0;	if(lowy < 0) lowy = 0;	if(higy < 0) higy = 0;	if(lowx > 14000) lowx = 14000;	if(higx > 14000) higx = 14000;	if(lowy > 14000) lowy = 14000;	if(higy > 14000) higy = 14000;	if(debug)		Bprint(&bout, "xy on plate: %d,%d %d,%d\n",			lowx,lowy, higx, higy);	if(lowx >= higx || lowy >=higy) {		Bprint(&bout, "no image found\n");		return 0;	}	b = malloc((higx-lowx)*(higy-lowy)*sizeof(*b));	if(b == 0) { emalloc:		fprint(2, "malloc error\n");		return 0;	}	memset(b, 0, (higx-lowx)*(higy-lowy)*sizeof(*b));	slowx = lowx/500;	shigx = (higx-1)/500;	slowy = lowy/500;	shigy = (higy-1)/500;	for(sx=slowx; sx<=shigx; sx++)	for(sy=slowy; sy<=shigy; sy++) {		if(sx < 0 || sx >= nelem(rad28) || sy < 0 || sy >= nelem(rad28)) {			fprint(2, "bad subplate %d %d\n", sy, sx);			free(b);			return 0;		}		sprint(file, "%s/%s/%s.%c%c",			dssmount(bp->disk),			bp->rgn, bp->rgn,			rad28[sy],			rad28[sx]);		ip = dssread(file);		if(ip == 0) {			fprint(2, "can't read %s: %r\n", file);			free(b);			return 0;		}		x = sx*500;		y = sy*500;		for(j=0; j<ip->ny; j++) {			if(y+j < lowy || y+j >= higy)				continue;			p = &ip->a[j*ip->ny];			up = b + (higy - (y+j+1))*(higx-lowx) + (x - lowx);			for(i=0; i<ip->nx; i++) {				if(x+i >= lowx && x+i < higx)					*up = dogamma(*p);				up++;				p += 1;			}		}		free(ip);	}	pic = malloc(sizeof(Picture));	if(pic == 0){		free(b);		goto emalloc;	}	pic->minx = lowx;	pic->miny = lowy;	pic->maxx = higx;	pic->maxy = higy;	pic->data = b;	strcpy(pic->name, bp->rgn);	return pic;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -