#99 Article 366 Posted at 1992/07/22 07:07:56 by 桑野誼智 (MAP2509) [A.PALET.F]
Subject: Re:*12 誰かML1のフォーマットを /358 ..... /345 /344
> というわけで、誰か変換公式教えて下さい。
私がFMRでやった時はこんなprocedureでした。
ちなみに人に教えてもらって中身はあまり理解してないので
そのまま切り出しました(^^;)。
あ、ターパス3です(^^;)。
procedure set_palette;
const fmax = 59;
smax = 100;
vmax = 100;
cmax = 255;
order :array[1..16,1..3] of integer=
((0,8,16),(24,32,40),(25,33,41),(1,9,17),(26,34,42),
(2,10,18),(27,35,43),(3,11,19),
(28,36,44),(4,12,20),(29,37,45),(5,13,21),
(30,38,46),(6,14,22),(31,39,47),(7,15,23));
var h,s,v,ii,f : integer;
mc,scp,scn,cc,r,g,b : byte;
begin
assign(fpina,fname + '.ALG');
{$I-} reset(fpina); {$I+}
if IOresult = 0 then begin
for i := 0 to 15 do begin
seek(fpina,order[i+1,1]);
read(fpina,h);
seek(fpina,order[i+1,2]);
read(fpina,s);
seek(fpina,order[i+1,3]);
read(fpina,v);
ii := h div (fmax + 1);
f := h mod (fmax + 1);
mc := round(cmax * (v / vmax));
scp := round(cmax * (v / vmax) * (1 - (s / smax) * (1 - (f / fmax))));
scn := round(cmax * (v / vmax) * (1 - (s / smax) * (f / fmax)));
cc := round(cmax * (v / vmax) * (1 - (s / smax)));
case ii of
0:begin
b := cc;
r := mc;
g := scp;
end;
1:begin
b := cc;
r := scn;
g := mc;
end;
2:begin
b := scp;
r := cc;
g := mc;
end;
3:begin
b := mc;
r := cc;
g := scn;
end;
4:begin
b := mc;
r := scp;
g := cc;
end;
5:begin
b := scn;
r := mc;
g := cc;
end;
end;
g_palette(i,r,g,b);
palette[i+1,1] := r;
palette[i+1,2] := g;
palette[i+1,3] := b;
end;
end
else begin
for i := 0 to 15 do begin
pal_init(i);
port[$0408] := i;
palette[i+1,1] := port[$040C];
palette[i+1,2] := port[$040E];
palette[i+1,3] := port[$040A];
end;
end;
end;
…ほんとにあってるのかしら?(^^;)
えーと、確かcmaxがRGBの最大値だったので、98では15に
なると思います。
orderはFMRの色番号順なので無視してください。
誰かRGB→HSVも含めてちゃんと知ってる人いないかな。
桑野誼智♪
◎◎