#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も含めてちゃんと知ってる人いないかな。

                    桑野誼智♪
◎◎