rozjasnianie obrazu przez zmiane wspolrzednych RGB

0

Witam, potrzebuje napisac program ktory rozjasnia lub przyciemnia wczytana bitmape przez wspolrzednych rgb. Jak do tej pory udalo mi sie zrobic przyciemnianie natomiast z rozjasnieniem mam duzy problem. Przy przyciemnianiu wystarczylo proporcjonalnie obnizyc kazda z 3 barw w druga strone juz nie jest tak latwo. Przyklad:

Powiedzmy ze chce przyciemnic barwe o wspolrzednych R:207 G:61 B:167 o 30% otrzymam barwe R:145 G:42 B:116.
algorytm:

r:=r-round(r30/100)
g:=g-round(g
30/100)
b:=b-round(b*30/100)

Proces ten bez problemu przyciemni mi wczytana wczesniej bitmape, wydawaloby sie ze analogicznie zwiekszajac proporcjonalnie wspolrzedne mozna rozjasniac obraz ale tutaj pojawia sie problem w sytuacjach gdy ktoras wspolrzedna wynosi 0. Przyklad rozjasnianie o 100%:

R:100 G:200 B:0 otrzymamy R:200 G:255 B:0

co zmienia otrzymany kolor wspolrzedna B:0 podniesiona o 100% wynosi dalej 0. Prawidlowo aby zachowac barwe wspolrzedna B powinna wynosic 145. Potrzebuje algorytmu ktory pomoze mi w rozjasnianiu bitmapy. Mam nadzieje ze sa osoby ktore bede chetne do pomocy, z gory dzieki.

0

Istnieją trzy podstawowe operacje na jasności obrazu:

  1. jasność (dodawanie)
  2. kontrast (mnożenie)
  3. gamma (potęgowanie)

@1. dodajemy (jaśniej) lub odejmujemy (ciemniej) pewną stałą wartość, np.
[100;0;45] + 20 => [120;20;65]
@2. mnożymy przez pewną liczbę rzeczywistą, większą od 1,0 (jaśniej) lub mniejszą od 1,0 (ciemniej), np.
[100;0;45] * 1,3 => [130;0;59]
@3. kolor przeskalowany do przedziału 0,0..1,0 podnosimy do potęgi rzeczywistej, mniejszej od 1,0 (jaśniej) lub większej od 1,0 (ciemniej), np.
[100;0;45] gamma 1,3 => {0,392; 0; 0,176} ^ 1,3 => {0,296; 0; 0,105} => [76;0;27]
To co robisz w tej chwili to kontrast.

0

dzieki wielkie bardzo mi pomogles

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