w Delphi paleta kolorów ...

0

Otrzymałem w szkole za zadanie utworzenie "palety kolorów" w delphi. Nie ukrywam, że orłem nie jestem i nie byłem nigdy w programowaniu i co dla jednych jest błachostką dla mnie górą nie do zdobycia ;P Nie ukrywam, że błogosławieństwem był by dla mnie gotowiec ale składam podziękowanie nawet za najmniejszą pomoc :) Głównie chodzi mi o taka palete kolorów gdzie mogłbym kursorem wybrać i wyświetliły by sie wartości odpowiedzialne za R G B. Wizualnie chodzi o pionowy pasek wyboru barwy oraz boczy kwadrat gdzie mogłbym dokładniej określić nasycenie. Ciągle z tym walcze i jak ktoś jest zainteresowany moimi wypocinami to moge wysłać to do czego doszedłem, ale uprzedzam jest to naprawde niewiele [sciana] jeszcze raz dziękuje każdemu kto zaangażuje sie do mojej walki z wiatrakami ... :D

0

Paleta jest dostępna w pakiecie JVCL. Możesz podglądnąć źródła i może na coś wpadniesz :)

//komponent nazywa się JvGammaPanel

A stąd możesz ściągnąć pakiet JVCL: http://homepages.borland.com/jedi/jvcl/

0

dzis mam dobry dzien wiec bedzie gotowiec (mam nadzieje ze o to Ci chodzilo)

Na forme musisz dac Image i ustawic rozmiar 512 x 512

Daj to pod np buttona:

var
  i, j, x, y: integer;
begin
  enabled := false;
  r := 0;
  g := 0;
  b := 0;
  x := 0;
  y := 0;

  for j := 0 to 255 do
  begin
    for i := 0 to 255 do
    begin
      image1.Canvas.Pixels[x,y] := rgb(r, g, b);

      r := r + 1;
      y := y + 1;
    end;
    x := x + 1;
    y := 0;
    g := g + 1;
  end;

  r := 0;
  g := 0;
  b := 0;

  for j := 0 to 255 do
  begin
    for i := 0 to 255 do
    begin
      image1.Canvas.Pixels[x,y] := rgb(r, g, b);

      r := r + 1;
      y := y + 1;
    end;
    x := x + 1;
    y := 0;
    b := b + 1;
  end;

  r := 0;
  g := 0;
  b := 0;
  x := 0;
  y := 255;

  for j := 0 to 255 do
  begin
    for i := 0 to 255 do
    begin
      image1.Canvas.Pixels[x,y] := rgb(r, g, b);

      b := b + 1;
      y := y + 1;
    end;
    x := x + 1;
    y := 255;
    g := g + 1;
  end;

  enabled := true;

A to pod OnMouseMove image1:

var
  ar, ag, ab: byte;
  col: tcolor;
begin
  ar := 0;
  ag := 0;
  ab := 0;
  image1.Canvas.Brush.Color := image1.Canvas.Pixels[x, y];
  col := image1.Canvas.Pixels[x, y];
  ar := GetRValue(col);
  ag := GetGValue(col);
  ab := GetBValue(col);

  image1.Canvas.Rectangle(255+30, 255+30, 255+255-30, 255+30+70);

  image1.Canvas.Brush.Color := clWhite;
  image1.Canvas.Rectangle(255+30, 255+30+80, 255+255-30, 255+255-30);
  image1.Canvas.TextOut(255+30+10, 255+30+90, 'Czerwony: ' + IntToStr(ar));
  image1.Canvas.TextOut(255+30+10, 255+30+110, 'Zielony: ' + IntToStr(ag));
  image1.Canvas.TextOut(255+30+10, 255+30+130, 'Niebieski: ' + IntToStr(ab));

mi dziala a jesli beda jakies bledy to tylko przez kopiuj wklej ;P

0

A ja mam banalny przykład fotoszopopodobnej palety kolorów, którą udało mi się wyskrobać (metodą prób i błędów) w jakieś 20 minut.

procedure TForm1.Button2Click(Sender: TObject);
var
A, B:Integer;
tr, tg, tb:byte;
begin

for A:=0 to 360 do
for B:=280 to 310 do
begin
hlstorgb(A, 120, 255, tr, tg, tb);
Canvas.Pixels[A, B]:=rgb(tr, tg, tb);
end;
end;

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var
A, B:Integer;
tr, tg, tb:byte;
begin
for A:=1 to 255 do
for B:=1 to 255 do
begin
hlstorgb(X, B, A, tr, tg, tb);
Canvas.Pixels[A-1, 254-B]:=rgb(tr, tg, tb);
end;
end;

Potrzebny jest do tego moduł HColorUtitles lub inny, który potrafi konwertować kolory rgb<->hls. Oczywiście trzeba by to przerobić na metodę scanline, ale to już nie będzie zbyt trudne.

1 użytkowników online, w tym zalogowanych: 0, gości: 1