clear.rect dwie warstwy

0

Witam. Mam następujący problem. Wczytuje jedna grafike nakładam na nia czerwony kwadrat (aplet BlueJ) i chce zrobic tak aby ruchami myszki rysujac na tym czerwonym tle odkrywac obrazek ktory jest ponizej. Doszedłem do miejsca w którym rysowanie działa ale pojawia sie białe tło zamiast tego obrazku wczytanego pod tym kwadratem czerwonym. I moje pytanie brzmi jak "zablokowac" ten obrazek ponizej czerwonego tla aby tylko ruchami myszki "wymazywac" czerwony a nie ruszajac tego nizej. Użyłem clear.rect co ma powodować przeźroczystosc lecz powoduje to tez ze obrazek (pod czerwonym tłem) tez znika.

0

Metoda clearRect zwykle nie powoduje przezroczystości (a wręcz przeciwnie). Żeby wykonać takie zadanie najprościej jest dwukrotnie wyświetlić w paint za pomoca drawImage dwa obrazki - najpierw Twój kolorowy obrazek, który może być na dowolnej głębi kolorów (najlepiej 24-bit RGB), a następnie drugi koniecznie 32-bitowy aRGB (lub RGBa) z czerwonym tłem (w części RGB). Ten czerwony musi mieć początkowo kanał alfa całkowicie nieprzezroczysty, czyli wyświetlający wyłącznie swój czerwony kolor.

Wymazywanie ma polegać na stopniowym likwidowaniu nieprzezroczystości przez albo zamianę kanału alfa w "czerwonym obrazku" pod narzędziem na pełną przezroczystość (przez zamianę "koloru" kanału alfa z 0 na 255 lub odwrotnie), albo chcąc uzyskać efekt jeszcze lepszy stopniowo zwiększając tę przezroczystość zależnie od nacisku narzędzia (mysz nie potrafi tego modelować, potrafią to tylko bardziej wyszukane kontrolery), albo maksymalnie centralnie w miejscu kursora i coraz mniej zależnie od odległości od punktu kursora (można to też osiągnąć przez nakładanie maski bitowej z gradientem centralnym).
W ten sposób jeżeli po każdym użyciu narzędzia (przesunięciu jego kursora) użyjesz repaint, to odrysowywane dwa obrazy będą coraz bardziej odsłaniać kolory tego "pod spodem" (czyli rysowanego jako pierwszy).

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