Usuwanie rysowanego tla myszka

Usuwanie rysowanego tla myszka
RO
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 83
0

Hej,

Postawilem sobie o to takie zadanie z ktorym nie moge sobie poradzic.
Majac okno przypuscmy JFrame okno wstawilem JPanel fotografia.
Po uruchomieniu programu pokazuje sie zdjecie ladowane za pomoca BufferedImage do JLabel w panelu fotografia.
Teraz chce przyslonic panel fotografia nastepnym panelem powiedzmy tworze w JFrame JPanel o nazwie warstwa.
Panel warstwa maluje taki sam obszar jak fotografia w kolorze powiedzmy zielonym.
Po uruchomieniu widze wiec panel warstwa a fotografii nie.

Teraz chce zrobic tak by usuwajac w jakis latwy sposob po trochu panel warstwa ukazywac panel fotografia

Opcja clearRect() - pokazuje tlo okna wiec odpada.
Nie wiem za to jak malowac warstwe usuwajac powiedzmy dany punkt czyli np. odmalowywac za kazdym razem po usunieciu punktu x,y kliknietego myszka. Musialbym chyba wtedy dzielic obszary malowane na kilka mniejszych, wiec bez sensu.

Ma ktos jakis pomysl?

bogdans
  • Rejestracja: dni
  • Ostatnio: dni
0

Nie wiem jaki efekt odsłaniania chcesz uzyskać. Jedna z możliwości, to skorzystanie z kanału alpha (przezroczystość). Na początku panel jest nieprzezroczysty, uruchamiasz Timer, który co pewien czas zwiększa przezroczystość i wywołuje odrysowanie (repaint()).

bogdans
  • Rejestracja: dni
  • Ostatnio: dni
1

Mi działa takie rozwiązanie. Tworzę dwa obrazki:

Kopiuj
photo = ImageIO.read(new File(...));
courtain = new BufferedImage(width,height,BufferedImage.TYPE_INT_ARGB);
Graphics2D g = courtain.createGraphics();
g.setColor(new Color(116,158,139));
g.fillRect(0,0,width,height);  //width i height są ustalane na podstawie rozmiarów wczytanego obrazka

W głównym oknie (JFrame) umieszczany jest panel (JPanel) implementujący MouseMotionListener

Kopiuj
public void paintComponent(Graphics g)
{
    if(photo != null)
    {
        g.drawImage(photo,0,0,null);
    }
    if(courtain != null)
    {
        g.drawImage(courtain,0,0,null);
    }			
} 
public void mouseDragged(MouseEvent evt) 
{
    int x = evt.getX();
    int y = evt.getY();
    int rgba = new Color(116,158,139,0).getRGB();
    for(int w = y-5;w<=y+5;w++)
    {
         for(int k = x-5;k<=x+5;k++)
         {
              courtain.setRGB(k,w,rgba);            
         }
    }
    repaint();
}
RO
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 83
0

Dzieki za odpowiedz, wszystko dziala jak trzeba, grzebiac w internecie zamotalem metode paint i w niej malowalem warstwe do drapania przez to nie dzialalo jak trzeba.

Jeszcze raz dzieki

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.