[ Nemanja Avramović @ 19.04.2005. 12:49 ] @
Vidim da su sad u modi pastelne boje, pa zelim da u delphiju napravim neke pastelne boje :D

na adresi http://wiki.tcl.tk/10330 sam nasao kako se to radi, ali naravno, ne umem to da uradim :D
"Conceptually it works by creating RGB color, converting into HSV space and rejecting any color with V less than .7"

dakle...
1) generisati RGB boju (tj. izabrati boju pa uzeti njen RGB, ili tako nekako)
2) prebaciti je u HSV (kako!?)
3) odbaciti boje sa V manjim od .7 (kako!?)

ajde da pravimo pastel colors!!! :D
[ Toyo @ 19.04.2005. 14:08 ] @
Code:

type
  THSV = record  // hue saturation value (HSV)
           Hue , Sat , Val : Double;
         end;
{....}

function RGB2HSV (R,G,B : Byte) : THSV;
var
  Min_, Max_, Delta : Double;
  H , S , V : Double ;
begin
  H := 0.0 ;
  Min_ := Min (Min( R,G ), B);
  Max_ := Max (Max( R,G ), B);
  Delta := ( Max_ - Min_ );
  V := Max_ ;
  If ( Max_ <> 0.0 ) then
    S := 255.0 * Delta / Max_
  else
    S := 0.0 ;
  If (S <> 0.0) then
    begin
      If R = Max_ then
        H := (G - B) / Delta
      else
        If G = Max_ then
          H := 2.0 + (B - R) / Delta
        else
          If B = Max_ then
            H := 4.0 + (R - G) / Delta
    End
  else
    H := -1.0 ;
  H := H * 60 ;
  If H < 0.0 then H := H + 360.0;
  with Result Do
    begin
      Hue := H ;             // Hue -> 0..360
      Sat := S * 100 / 255; // Saturation -> 0..100 %
      Val := V * 100 / 255; // Value - > 0..100 %
    end;
end;
[ Nemanja Avramović @ 19.04.2005. 19:17 ] @
joj hvala ti puno!!
[ Nemanja Avramović @ 19.04.2005. 21:00 ] @
a da li neko zna sta je ovaj mislio pod time da odbaci boju koja ima V manje od .7? ako odbacim boju, onda necu imati nista :D
[ Toyo @ 19.04.2005. 21:13 ] @
Pa ako hoces da izdvojis - prikazes samo pastelne boje onda, ides sa r=0..255, b=0..255, g=0..255 sa nekim korakom, i proveravas da li je pastelna. Ako je pastelna (v>0.7) onda je prikazujes u paleti.

Znaci ovako nekako:
Code:


function Pastelna(r,g,b): boolean;
var 
  t:THSV
begin
  t:=RGB2HSV(r,g,b);
  result := t.v>0.7
end;

var 
  r,g,b:byte;
begin
  for r:=0 to 255 do
    for g:= 0 to 255 do
      for b:=0 to 255 do
        if pastelna(r,g,b) then
          DodajUPaletuPastelnih(r,g,b);
   PrikaziPaletuPastelnih;
end;
[ Nemanja Avramović @ 19.04.2005. 22:23 ] @
aha, aha... 'fala, sta vise da kazem

probacu ovo izjutra...
[ Nemanja Avramović @ 20.04.2005. 15:25 ] @
jos ovo:
Code:

function
  TColorToHex( Color : TColor )
    : string;
begin
  Result :=
    { red value }
    IntToHex( GetRValue( Color ), 2 ) +
    { green value }
    IntToHex( GetGValue( Color ), 2 ) +
    { blue value }
    IntToHex( GetBValue( Color ), 2 );
end;


i mogu da postavljam pastelne boje na sajtove :D !!!
[ Nemanja Avramović @ 20.04.2005. 18:29 ] @
ej ovo nece da radi, kaze:
Code:

[Error] Unit1.pas(39): Undeclared identifier: 'Min'
[Error] Unit1.pas(40): Undeclared identifier: 'Max'
[Error] Unit1.pas(72): Missing parameter type
[Error] Unit1.pas(75): ';' expected but 'BEGIN' found
[Error] Unit1.pas(77): Undeclared identifier: 'v'
[Fatal Error] Project1.dpr(5): Could not compile used unit 'Unit1.pas'


evo prikacenog projekta...
[ Toyo @ 20.04.2005. 21:13 ] @
funkcije min i max su iz unita Math i sluze zans cemu(odredjivanju minimuma i maximuma 2 broja)
Imao si gresku u deklaraciji funkcije Pastelan(r,g,b) trebalo je da stavis da su r,g,b tipa byte(posto sam primer pisao samo kao skicu).
Ono v je trebalo da bude Val

E sad nesto drugo: Ja sam ti dao kao primer da se skeniraju sve boje od 0..255 za r,g,b a to je preko 16 miliona skeniranja. Bice jako puno boja u onom tvom listboxu (nekoliko milona), zaro treba da odredis korak za nje. Ukinuo sam for petlje, a ti biraj korak.
I sa korakom od 32, je broj boja dosta veliki.

Code:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, math;


type
  THSV = record  // hue saturation value (HSV)
           Hue , Sat , Val : Double;
end;

type
  TForm1 = class(TForm)
    Button1: TButton;
    ListBox1: TListBox;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

function RGB2HSV (R,G,B : Byte) : THSV;
var
  Min_, Max_, Delta : Double;
  H , S , V : Double ;
begin
  H := 0.0 ;
  Min_ := Min (Min( R,G ), B);
  Max_ := Max (Max( R,G ), B);
  Delta := ( Max_ - Min_ );
  V := Max_ ;
  If ( Max_ <> 0.0 ) then
    S := 255.0 * Delta / Max_
  else
    S := 0.0 ;
  If (S <> 0.0) then
    begin
      If R = Max_ then
        H := (G - B) / Delta
      else
        If G = Max_ then
          H := 2.0 + (B - R) / Delta
        else
          If B = Max_ then
            H := 4.0 + (R - G) / Delta
    End
  else
    H := -1.0 ;
  H := H * 60 ;
  If H < 0.0 then H := H + 360.0;
  with Result Do
    begin
      Hue := H ;             // Hue -> 0..360
      Sat := S * 100 / 255; // Saturation -> 0..100 %
      Val := V * 100 / 255; // Value - > 0..100 %
    end;
end;


//odredjivanje pastelne (potreban gornji kod)
function Pastelna(r,g,b:byte): boolean;
var 
  t:THSV;
begin
  t:=RGB2HSV(r,g,b);
  result := t.val>=70
end;


procedure TForm1.Button1Click(Sender: TObject);
const
  korak=32;
var
  r,g,b:integer;
begin
  r:= 0;
  while r < 256 do
    begin
      g := 0;
      while g < 256 do
        begin
          b:= 0;
          while b<256 do
            begin
              if pastelna(r,g,b) then
                listbox1.Items.Add(colortostring(rgb(r,g,b)));
              inc(b,korak);
            end;
          inc(g, korak);
        end;
      inc(r,korak);
    end;
end;

end.
[ Nemanja Avramović @ 21.04.2005. 00:56 ] @
hvala ti ono... bas bas :)
i opet: probacu ovo sutra, sad mi se spava ;)

hvala ti jos jednom sto se trudis da mi pomognes, i to na najbolji nacin: kodom
[ Nemanja Avramović @ 21.04.2005. 01:50 ] @
zasto mi se cini da ovde ima i non-pastel boja? mozda je ovaj pogresio? :D

a dobro... provalicu ja vec nekako... menjacu brojke :))
[ Toyo @ 21.04.2005. 07:34 ] @
U bojama bas nisam jak :( , ali ako je onaj rekao da su pastelna sve vece od Val>70%, i ako funkcija dobro izracunava HSV - onda je to to.
Probaj da smanjis korak na 8 ili 16.

Nesto mi se cini da ima previse "ako" u mojoj prvoj recenici. :)
[ Jovan Prokopović @ 27.04.2005. 12:29 ] @
Pastelne boje bez komplikovanja sa HSV kolor modelom.
Problem kod prethodne tehnike je u tome sto odbaci tamne boje (V>70),
ali ostaju zasicene boje (Saturation).
[ Nemanja Avramović @ 27.04.2005. 21:58 ] @
pogledao sam kod ali ne kapiram na koju foru izdvaja boje??
[ _v!rus_ @ 28.04.2005. 02:41 ] @
Ne "izdvaja" boje nego generise sve RGB kombinacije, gde je R, G i B od 150 do 240... A da li je boja pastelna, to je cisto subjektivno-perceptivna stvar, ja cak ni nemam neku predstavu sta je to zapravo "pastelna" boja, tj. koje su karakteristike.