📄 graph2.c
字号:
/* SCCSID @(#)graph2.c 1.8 12/15/97 */
#include "common.h"
#include "graapi.h"
#include "palette.h"
#include "../constvar.h"
extern struct _palette rgb_palette[];
/* yuv palette structure */
typedef struct YUVQUAD
{
unsigned char yuvReserved;
unsigned char yuvV;
unsigned char yuvU;
unsigned char yuvY;
} YUVQUAD;
long int *savemem;
extern unsigned int *rgbBuf;
extern char Change_flag[18][11];
int sav_count;
void SetPalette(YUVQUAD *pPalette, int start, int paletteSize)
{
int i, end;
end=start+paletteSize;
if (end>256) end=256;
for (i = start; i < end; i++)
{
rgb_palette[i].r = pPalette[i].yuvY;
rgb_palette[i].g = pPalette[i].yuvU;
rgb_palette[i].b = pPalette[i].yuvV;
asm("nop"); asm("nop"); asm("nop"); asm("nop"); }
if (end>start) WrPaletteToDM();
}
unsigned char FindNearestColorIndex(YUVQUAD color)
{
int i;
int y0,u0,v0, y1,u1,v1, f2, fmin=1<<30;
unsigned char j;
y0 = (char) color.yuvY;
u0 = (char) color.yuvU;
v0 = (char) color.yuvV;
for (i = 0; i < 256; i++)
{
y1 = (int)((char) rgb_palette[i].r);
u1 = (int)((char) rgb_palette[i].g);
v1 = (int)((char) rgb_palette[i].b);
f2 = (y1-y0)*(y1-y0) + (u1-u0)*(u1-u0) + (v1-v0)*(v1-v0);
asm("nop"); asm("nop"); asm("nop"); asm("nop"); if (f2<fmin) {
fmin=f2; j=i;
/* if (fmin<5) return j; */
}
}
return j;
}
void GPFramePoly(int num, int *poly, int color, int mode) {
int i;
FGPNT p1,p2;
p2.fX=poly[2*num-2];
p2.fY=poly[2*num-1];
for (i=0;i<num;i++) {
p1=p2;
p2.fX=poly[2*i];
p2.fY=poly[2*i+1];
GPDrawLine(p1,p2, 0, color, mode);
}
}
void Save_Rect(FGRECT rect)
{
int *k,i,sum1,sum2;
int x1,x2,y1,y2;
int fBottom,fTop,fRight,fLeft;
fBottom = rect.fC.fBottom;
fTop = rect.fC.fTop;
fRight = rect.fC.fRight;
fLeft = rect.fC.fLeft;
if (fBottom-fTop+fRight-fLeft>512) return;
sum1=0;
x1=fTop*88;
x2=fBottom*88;
sum2 = fRight>>2;
for (i = fLeft>>2; i < fRight>>2; i++) {
savemem[sum1]=*(long *)(rgbBuf+x1+i);
savemem[sum2]=*(long *)(rgbBuf+x2+i);
sum1++;
sum2++;
}
y1=fLeft>>2;
y2=fRight>>2;
sum1=sum2; sum2+=fBottom;
k = rgbBuf+fTop*88;
for (i = fTop; i <= fBottom; i++){
savemem[sum1]=*(long *)(k+y1);
savemem[sum2]=*(long *)(k+y2);
sum1++;
sum2++;
k+=88;
}
}
void Restore_Rect(FGRECT rect)
{
int *k,i,j,sum1,sum2;
int x1,x2,y1,y2;
int addr;
int fBottom,fTop,fRight,fLeft;
fBottom = rect.fC.fBottom;
fTop = rect.fC.fTop;
fRight = rect.fC.fRight;
fLeft = rect.fC.fLeft;
if (fBottom-fTop+fRight-fLeft>512) return;
change_flag(fTop>>4, fBottom>>4, fLeft>>5, fRight>>5);
x1=fTop*88;
x2=fBottom*88;
sum1=0;
sum2=fRight>>2;
for (i = fLeft>>2; i < fRight>>2; i++){
*(long *)(rgbBuf+x1+i)=savemem[sum1];
*(long *)(rgbBuf+x2+i)=savemem[sum2];
sum1++;sum2++;
}
y1=(fLeft>>2);
y2=(fRight>>2);
sum1=sum2;sum2+=fBottom;
k = rgbBuf+fTop*88;
for (i = fTop; i <= fBottom; i++){
*(long *)(k+y1)=savemem[sum1];
*(long *)(k+y2)=savemem[sum2];
sum1++; sum2++;
k+=88;
}
}
void polysave(int num, int *poly)
{
int x, y;
int i, j;
int x0, x1, y0, y1;
FGPNT p1,p0;
sav_count = 0;
x1 = poly[2*num-2];
y1 = poly[2*num-1];
for (i=0; i<num; i++){
x0 = x1;
y0 = y1;
p0.fX = x0; p0.fY = y0;
x1 = *(int *)(poly++);
y1 = *(int *)(poly++);
p1.fX = x1; p1.fY = y1;
GPDrawLine(p0,p1,1,0,1);
}
}
void polyrestore(int num, int *poly)
{
int x, y;
int i, j;
int x0, x1, y0, y1, x2, y2, x3, y3;
int tmp0, tmp1;
FGPNT p1,p0;
sav_count = 0;
x1 = poly[2*num-2];
y1 = poly[2*num-1];
for (i=0; i<num; i++){
x0 = x1;
y0 = y1;
p0.fX = x0; p0.fY = y0;
x1 = *(int *)(poly++);
y1 = *(int *)(poly++);
p1.fX = x1; p1.fY = y1;
if (x0<x1){
x2=x0;
x3=x1;
}
else{
x2=x1;
x3=x0;
}
tmp0 = y0; tmp1 = y1;
if (y0>y1) {
tmp0 = y1; tmp1 = y0;
}
change_flag(tmp0>>4, tmp1>>4, x2>>5, x3>>5);
GPDrawLine(p0,p1,1,0,0);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -