返回
{***************************************************************}
{*** FVision Unit Version1.0 ***}
{*** 蓝蚂蚁工作室 ***}
{***************************************************************}
{*** 图像处理单元 ***}
{***************************************************************}
Unit FConCol;
Interface
Uses
Dos,Graph,FGraph,Ftool,FDac,FCutGra,SvgaDrv;
procedure ConvertCutFile(Name:PathStr);
Implementation
const
StandCol:array[1..48] of Byte=
(0,0,0, 0,0,42, 0,42,0, 0,42,42, 42,0,0, 42,0,42,
42,21,0, 42,42,42, 21,21,21, 21,21,63, 21,63,21,
21,63,63, 63,21,21, 63,21,63, 63,63,21, 63,63,63);
var
New_Dac:DacType;
Used:Integer;
ColUse,OrderC:ColorUseType;
Les:array[0..15] of Integer;
Con:array[0..255] of Integer;
procedure OrderColor;
var
i,j,k:Integer;
Find:Boolean;
begin
for i:=0 to 15 do
begin
Les[i]:=0;
for j:=0 to 255 do
if (j<>Les[i])and(ColUse[j]<ColUse[Les[i]]) then
begin
Find:=True;
for k:=0 to i-1 do
if j=Les[k] then Find:=False;
if Find then Les[i]:=j;
end;
end;
end;
function InLesColor(Ind:Integer):Boolean;
var
i:Integer;
begin
InLesColor:=False;
for i:=0 to 15 do
if Les[i]=Ind then
begin
InLesColor:=True;
Exit;
end;
end;
function SubstColor(Ind:Integer):Integer;
var
Temp,OldTemp,TempColor,i:Integer;
begin
OldTemp:=1000;
TempColor:=16;
for i:=16 to 255 do
if not InLesColor(i) then
begin
Temp:=Abs(New_Dac[Ind*3+1]-New_Dac[i*3+1])+
Abs(New_Dac[Ind*3+2]-New_Dac[i*3+2])+
Abs(New_Dac[Ind*3+3]-New_Dac[i*3+3]);
if Temp<OldTemp then
begin
TempColor:=i;
OldTemp:=Temp;
end;
end;
SubstColor:=TempColor;
end;
procedure ConvertCutFile(Name:PathStr);
var
i,j,Color:Integer;
begin
Dac.GetDac(New_Dac);
Used:=GetUseColor(0,0,Maxx+1,Maxy+1,ColUse);
OrderColor;
for i:=0 to 15 do
Move(New_Dac[i*3+1],New_Dac[Les[i]*3+1],3);
Move(StandCol,New_Dac,48);
for i:=0 to 255 do
Con[i]:=SubstColor(i);
for i:=0 to Maxx do
for j:=0 to Maxy do
begin
Color:=GetPixel8(i,j);
if Color<16 then
begin
if Les[Color]<16 then
PutPixel8(i,j,Con[Color])
else
PutPixel8(i,j,Les[Color]);
end else
if InLesColor(Color) then
PutPixel8(i,j,Con[Color]);
end;
Dac.SetNewDac(New_Dac);
GetCutGra(Name);
end;
end.