home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The Party 1994: Try This At Home
/
disk_image.bin
/
source
/
gallery
/
subdirs.exe
/
TEXTURE
/
PIX2BIN.PAS
< prev
next >
Wrap
Pascal/Delphi Source File
|
1993-07-21
|
2KB
|
111 lines
{$N+}
uses dos;
{$IFOPT N+} type real = single; {$ENDIF}
const TexRes = 128;
Type
PIX = array[0..199,0..319] of byte;
BIN = array[0..TexRes-1,0..TexRes-1] of byte;
hue = (red, green, blue);
rgb = array[hue] of byte;
Palette = array[0..255] of rgb;
{ Fits palette taking into account human eye sensitivity: }
const
hueFac : array[hue] of real = (1, 4.59, 0.061);
var I, O : File;
N : string;
SrcPal, DestPal : Palette;
Xlate : array[0..255] of byte;
c : byte;
B : BIN;
P : ^PIX;
k,j : integer;
procedure fitpalette;
var bestcol : byte;
besterr, err : real;
i,j : byte;
h : hue;
r : rgb;
begin
for j := 0 to 255 do begin
write('[',j:3,']',#13);
r := SrcPal[j];
bestcol := 0;
besterr := sqr(64)*3+1;
for i := 0 to 255 do if ((i mod 16)<>0) or (i=0) then begin
err := 0;
for h := red to blue do
err := err + sqr( integer(r[h])-DestPal[i,h] ){/hueFac[h]};
if err < besterr then begin
besterr := err;
bestcol := i
end;
end;
Xlate[j] := bestcol;
end;
writeln(' ');
end;
begin
writeln('PIX2BIN converter (for BINOBJ.EXE) // A.R-M. 7/93.');
writeln;
GetMem( P, SizeOf(PIX) );
if ParamCount<>1 then begin
write ('.PIX file name: '); readln( N );
writeln;
end else N := ParamStr(1);
assign(I,N+'.PAL'); reset(I,1);
blockread( I, SrcPal, SizeOf(SrcPal) );
close(I);
assign(I,'PIX2BIN.PAL'); reset(I,1);
blockread( I, DestPal, SizeOf(DestPal) );
close(I);
writeln('Fitting palette ',N,'.PAL to PIX2BIN.PAL...');
FitPalette;
assign(I, N+'.PIX'); reset(I,1);
blockread( I, P^, SizeOf(P^) );
close(I);
writeln('Scaling image...');
for j := 0 to TexRes-1 do begin
write('[',j:3,']',#13);
for k := 0 to TexRes-1 do begin
c := P^[ round(k/(TexRes-1)*199), round(j/(TexRes-1)*319) ];
B[j,k] := Xlate[c];
end;
end;
writeln(' ');
assign( O, N+'.BIN'); rewrite(O,1);
blockwrite( O, B, SizeOf(B) );
close(O);
FreeMem( P, SizeOf(P^) );
writeln;
writeln(N+'.BIN file successfully created from ',N,'.PIX');
end.