Witam od niepamiętnych czasów. Brak pomysłów na wpisy jak i czasu spowodował tak długą przerwę, aktualnie jestem chory także mogłem napisać ten wpis.
Już dawno, pojawił się wpis o mojej własnej klasie do manipulacji obrazkami z wykorzystaniem GD. Jednak po tych kilku miesiącach, gdzie coraz częściej zdarza mi się pisać obiektowo, (właściwie wyłącznie obiektowo) stwierdziłem, że klasa jest bez sensu. Właściwie do początku miałem świadomość tego, że jest to kontener na funkcję (praktycznie wszystkie metody były statyczne). Było tak dlatego aby pozostawić sobie możliwość tworzenia dwóch przekształceń obrazka np. do połowy ta samo – mamy oryginalny obrazek z którego chcemy stworzyć jego wersję obróconą wertykalnie + skala szarości oraz drugą wersję obróconą wertykalnie + powiedzmy negatyw. Ale przecież jest można klonować obiekty wykorzystując clone.
Tak więc siadłem kiedyś do modernizacji klasy (prace dokończyłem dzisiaj), i chciałbym zaprezentować jej możliwości, a przy okazji opisać jak operuje się na pixelach aby otrzymać takie proste filtry.
Przyda się kilka wyjaśnień co do używanych prze zemnie terminów, które są w zasadzie trywialne, ale dla mniej siedzących w temacie, tłumacze. Jeden kolor (jeden pixel wyświetlany na ekranie) składa się z 3 barw składowych (3 subpixeli) w których skład wchodzą Red, Green oraz Blue. Dodatkowo używane jest także czwarte „pole” tzw. kanał alpha, który mówi nam o przezroczystości wynikowej barwy. Każda składowa mówiąca o kolorze może przyjmować wartość od 0 do 255, natomiast kanał alpha jest ograniczony od 0 do 127. Kolory otrzymujemy mieszając składowe RGB, a przez to że mamy dostępnych 256^3 kombinacji poszczególnych składowych możemy stworzyć 16.581.375 różnych barw. Co do kanału alpha. Jeżeli jest on równy 127 to pixel jest niewidoczny (właściwie maksymalnie przezroczysty), natomiast jeśli jest równy 0 – pixel jest całkowicie widoczny. Jeszcze chyba ostatnia informacja. W komputerach grafika jest przedstawiana w układnie współrzędnych innym niż kartezjański. Nie mamy wartości ani argumentów ujemnych, więc wygląda to tak – lewy górny róg ekranu (obrazka or sth.) to punkt (0, 0), iksy rosną ku prawej, natomiast igreki ku dołowi.