home *** CD-ROM | disk | FTP | other *** search
/ Amiga ACS 1997 #2 / amigaacscoverdisc / amigascene / diskmagazines / izviestia / izviestia_10 / texts / 035 / 035
Text File  |  1996-08-12  |  6KB  |  136 lines

  1. B˜               „Emboss
  2.  
  3.  
  4.  
  5. ƒ[Leo/Fire]
  6.  
  7.    Kiedyô  w  Magazynie  Amiga  w  cyklu  „"Jak  ulepszyê  procedurë"‚ autorstwa
  8. Miklesza  ukazaî  sië  artykuî  jak  zrobiê  embossa  w  realtime. Przerobiîem
  9. procedurkë  na  AMOSa  i  uruchomiîem  (juû nie byî realtime). Wynik dziaîania
  10. procedury  nie  podobaî  mi  sië,  poniewaû  w  odróûnieniu od innych procedur
  11. liczâcych emobssa na tym obrazku nie daîo sië zauwaûyê "gîëbi" obrazu i kolory
  12. byîy pomieszane (tam, gdzie powinien byê jasny odcieï byî ciemny i na odwrót).
  13. Pomyôlaîem,  ûe  paleta  w  rysunku  byîa  odwrócona,  ale gdy przyjrzaîem sië
  14. obrazkowi  w  gazecie  doszedîem  do  wniosku, ûe tak powinno byê. Nie próbujë
  15. tutaj  poniûyê  procedury  Miklesza  gdyû wyliczenie odpowiedniego odcienia na
  16. podstawie jednego koloru byîo rozwiâzane w bardzo sprytny sposób.
  17.  
  18.    Moja  procedurka  do liczenia embossa powstaîa przed ukazaniem sië Magazynu
  19. Amiga  z  artykuîem  Miklesza.  Dlatego  proszë,  aby  nikt  nie  pomyôlaî, ûe
  20. procedurë  "zerûnâîem".  Najpierw  napisaîem procedurkë, która embossuje tylko
  21. szare  rysunki  i to w dodatku gdzie paleta kolorów jest odpowiednio ustawiona
  22. (w  assemblerze  pewnie  byîby  realtime  emboss).  Potem postanowiîem napisaê
  23. procedurkë, która embossuje kolorowe rysunki.
  24.  
  25.    Przechodzë  do  konkretów.  W  mojej  procedurze  emboss  jest  liczony  na
  26. podstawie  dwóch  punktów,  dziëki  czemu  moûna uzyskaê emboss low lub emboss
  27. high. Mój pomysî polega na tym ûe:
  28.  - pobieram wartoôê koloru z pozycji (x,y), zapisujë np.w zmiennej kol
  29.  - pobieram  wartoôê  koloru  z  pozycji  (x+2,y+2), zapisujë w zmiennej kol1
  30. (emboss low)
  31.  - robië negatyw koloru kol1
  32.  - potem róûnicë kol i kol1 dzielë na dwa (otrzymujë 50% przezroczystoôê)
  33.  - odejmujë róûnicë (kol-kol1)/2 od kol
  34.  
  35.    I  w  ten  sposób  otrzymujë odpowiedni kolor. Sposób ten jest niezîy tylko
  36. wtedy,  gdy  rysunek  jest  w  odcieniach  szaroôci, a paleta jest ustawiona w
  37. kolejnoôci  od  czarnego  do  biaîego  lub  na  odwrót. Procedura ta najlepiej
  38. "wypali"  gdy paleta bëdzie 16 kolorów, i gdy kolory nie bëdâ sië powtarzaê. W
  39. tej  procedurze problem negatywu obszedîem jak mi sië wydaje w ciekawy sposób.
  40. Mianowicie  od  iloôci  kolorów  odjâîem numer koloru pobranego z punktu (x+2,
  41. y+2)
  42.  
  43.  
  44.    Od razu napiszë odpowiedniâ procedurë w AMOSIE (najproôciej zrozumieê).
  45.  
  46. „__cut_here__
  47.  
  48. Load Iff "nazwa",1
  49. For y=0 To Screen Heigh
  50.   For x=0 To Screen Width
  51.  
  52.     kol=Point(x,y)
  53.     kol1=16-Point(x+2,y+2) : rem jeôli chcesz emboss low x+4, y+4 lub 3
  54.  
  55.     ok=kol-(kol-kol1)/2
  56.     Plot x,y,ok
  57.   Next
  58. Next
  59.  
  60. „__cut_here__
  61.  
  62.    W  assemblerze  gîówna  procedura  liczâca teû jest krótka, ale to juû sami
  63. napiszcie.
  64.  
  65.    Aby uzyskaê embossa w kolorze procedura bëdzie musiaîa sprowadziê wszystkie
  66. kolory  do odpowiednich odcieni szaroôci. Robië to przez wyrównanie wszystkich
  67. skîadowych  koloru do najwiëkszej skîadowej. W ten sposób moûna zmieniê paletë
  68. kolorów,   jeôli  nie  chcecie  zmieniaê  kolorów,  to  moûna  teû  zastosowaê
  69. nastëpujâcy sposób:
  70.  
  71.  1. Wyszukujecie w kolorze najwiëkszâ skîadowâ.
  72.  2.  Szukacie  wartoôci  potrzebnej  do  negatywu  poprzez  odjëcie  od  16 (w
  73. przypadku braku koôci AGA) wartoôci z punktu 1 (niech ta wartoôê to x)
  74.  3. Jeûeli na wartoôci z punktu 2 wykonacie nastëpujâcâ operacjë: X*256+X*16+X
  75. to otrzymacie wartoôê negatywu.
  76.  4.  Teraz  wystarczy  tylko,  jeûeli  z  palety kolorów wyszukacie najbliûszâ
  77. wartoôê koloru z punktu 3
  78.  5. Teraz pozostaje tylko wstawiê punkt
  79.  
  80.    Jeûeli  kolory z palety sprowadzicie do odcieni szaroôci, wtedy uzyskacie w
  81. miarë  dokîadnego  embossa,  w przeciwnym wypadku moûe to róûnie wyglâdaê. Aby
  82. Was   pocieszyê  Drodzy  Czytelnicy  opiszë  pewnâ  historië  z  mych  prób  z
  83. embossowaniem.  Kiedy  napisaîem procedurë (po kilku przemyôleniach) wîâczyîem
  84. rysunek  do  obróbki,  poczâtkowo  kolory  rysunku byîy sprowadzane do odcieni
  85. szaroôci,  wtedy  z  wyniku byîem bardzo zadowolony (byî coolowski), ale kiedy
  86. rysunek  byî  obrabiany  bez  zmiany  kolorów  efekt  wyszedî caîkowicie do d.
  87. Zaczâîem  sië  ostro  zastanawiaê co poprzekrëcaîem, ale nigdzie nie widziaîem
  88. bîëdu. Z ciekawoôci chciaîem zobaczyê jak wyglâda ten sam rysunek pod PPaintem
  89. po   procesie  embossowania,  i  to  co  zobaczyîem  bardzo  mnie  zadowoliîo,
  90. mianowicie   emboss   z   PPaint'a   wyglâdaî   prawie  identycznie  jak  mój.
  91. Pocieszajâce, no nie?
  92.  
  93.  
  94. Oto procedura:
  95.  
  96. ƒ__cut_here__
  97.  
  98. Dim KOL(31)
  99. For I=0 To 31
  100.    'A=Colour(I)                                           ƒ* Te obliczenia
  101.    'B=A/256                                               ƒ* sâ po to aby
  102.    'C=(A-B*256)/16                                        ƒ* rysunek byî
  103.    'D=A-B*256-C*16                                        ƒ* w odcieniach
  104.    'NA=Max(B,C)                                           ƒ* szaroôci.
  105.    'NA=Max(NA,D)                                          ƒ* (niekonieczne
  106.    'KOL=Abs(NA-B)*256+B*256+Abs(NA-C)*16+C*16+Abs(NA-D)+D ƒ* ale lepszy
  107.    'Colour I,KOL                                          ƒ* emboss)
  108.  
  109.    KOL(I)=KOL
  110. Next
  111.  
  112. „__cut_here__
  113.  
  114.    Teraz  o pewnej wadzie tego algorytmu. Kiedy liczenie emboss'a zakoïczy sië
  115. okaûe  sië,  ûe dwie lub trzy linie na prawej krawëdzi rysunku i na samym dole
  116. sâ   niedokîadnie   wyliczone.  Kaûdy  juû  powinien  wiedzieê  dlaczego.  „{‚no
  117. rzeczywiôcie  - KAÛDY. Kurcze, nie mówië, ûeby podawaê kawë na îawë, ale takie
  118. "sami  wiecie",  "rozumiecie",  "pomyôlcie  se  trochë"  jest bezdenne. "Patrz
  119. Czytelniku  jaki  jesteô  gîâb  - autor wie, a Ty nie": to popularne podejôcie
  120. wielu  tekôciarzy-programistów ƒ /korekta„}{‚a  wiëc wyjaôniam - chodzi o to "+2"
  121. (czy  tam  ile)  w  obliczaniu poszczególnych wartoôci - dla "krawëdzi ekranu"
  122. punkty  zwiëkszone  o  2  sâ  poza  nim  i  sâ  to  w sumie wartoôci "z nieba"
  123. (konkretnie  to chyba bëdzie  zero  -  tak  mi sië zdaje ;). Teraz zadowoleni?
  124. ƒ/LeMUr„}
  125.  
  126.    Jeûeli  ktoô  jest zainteresowany tematem grafiki, to dajcie znaê mnie albo
  127. redakcji. W miarë mych moûliwoôci bëdë sië staraî speîniaê Wasze ûyczenia.
  128.  
  129. ˜ƒ                     LEO/Fire
  130.  
  131.  
  132.  
  133. „{‚Wiëc  dobrze - ja, lamer nieprzeciëtny, jestem zainteresowany tematem grafiki
  134. (i  nie  tylko).  Dlatego  teû  uprzejmie  proszë  o obszerniejsze objaônienia
  135. nastëpnâ raz⠃/korekta„}
  136.